sql >> Databáze >  >> RDS >> Mysql

Jak zkombinovat téměř stejnou položku pomocí SQL?

Pokud to zkusíte:

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;

To dává:

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

Takže pak můžete zkusit:

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;

Což dává

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

(Nazval jsem svůj stůl foo a také jen použité názvy a a b protože jsem byl příliš líný psát zhangsan a lisi znovu a znovu).



  1. Jak mohu použít ROW_NUMBER()?

  2. Klíčové slovo LIMIT na MySQL s připraveným příkazem

  3. Jak mohu vložit komentáře ke sloupcům v PostgreSQL přes Python?

  4. Rails 4 LIKE dotaz - ActiveRecord přidává uvozovky