sql >> Databasteknik >  >> RDS >> Mysql

Hur kombinerar man nästan samma objekt med SQL?

Om du försöker:

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;

Detta ger:

+------+--------+------+
| 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å då kan du prova:

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;

Vilket ger

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

(Jag kallade mitt bord för foo och använde bara namn a och b eftersom jag var för lat för att skriva zhangsan och lisi om och om igen).



  1. Exportera data till Excel från Oracle Table med PL SQL

  2. Var är mitt ogiltiga tecken (ORA-00911)

  3. PHP till MySQL SSL-anslutningar

  4. Skicka PHP-variabel till bootstrap modal