Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak połączyć blisko ten sam przedmiot przez SQL?

Jeśli spróbujesz:

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;

Daje to:

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

Więc możesz spróbować:

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 daje

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

(Zadzwoniłem do mojej tabeli foo a także po prostu użyłem nazw a i b ponieważ byłem zbyt leniwy, aby napisać zhangsan i lisi w kółko).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wywołanie funkcji MySQL

  2. Pętla przez zmienne $_POST

  3. Sterownik QMYSQL dostępny, ale nie załadowany

  4. Tworzenie systemu licencji

  5. Zmienna zdefiniowana przez użytkownika MySQL w klauzuli WHERE