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).