sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kombinerer man næsten samme vare med SQL?

Hvis du prøver:

SET @name:='',@num:=0;

SELECT id,
       @num:= if(@name = user, @num, @num + 1) as number,
       @name := user as user
FROM foo
ORDER BY id ASC;
 

Dette giver:

+------+--------+------+ | id | number | user | +------+--------+------+ | 1 | 1 | a | | 2 | 1 | a | | 3 | 1 | a | | 4 | 2 | b | | 5 | 2 | b | | 6 | 2 | b | | 7 | 3 | a | | 8 | 3 | a | +------+--------+------+

Så kan du prøve:

SET @name:='',@num:=0;

SELECT COUNT(*) as count, user
FROM (
SELECT @num:= if(@name = user, @num, @num + 1) as number,
       @name := user as user
FROM foo
ORDER BY id ASC
) x
GROUP BY number;
 

Hvilket giver

+-------+------+ | count | user | +-------+------+ | 3 | a | | 3 | b | | 2 | a | +-------+------+

(Jeg kaldte mit bord foo og brugte også bare navne a og b fordi jeg var for doven til at skrive zhangsan og lisi igen og igen).



  1. MySQL - Vælg for at hente sidste dato og klokkeslæt

  2. Hvordan udfører man en orakel-lagret procedure?

  3. Kan magento bruge flere MySQL-slaver?

  4. C# opretter forbindelse til mysql gennem brugerkontrol