sql >> Database >  >> RDS >> Mysql

Hoe te combineren in de buurt van hetzelfde item door SQL?

Als je het probeert:

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;

Dit geeft:

+------+--------+------+
| 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    |
+------+--------+------+

Dus dan kun je proberen:

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;

Wat geeft

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

(Ik noemde mijn tafel foo en ook gewoon namen a en b omdat ik te lui was om zhangsan te schrijven en lisi keer op keer).



  1. MySQL 5.6 instellen met Macports

  2. Genereer tabelrelatiediagram van bestaand schema (SQL Server)

  3. Een gemeenschappelijke MS SQL Server-prestatie-indicator implementeren

  4. stop met het invoegen van gegevens in de database bij het vernieuwen van de pagina