我在数据库中有一些数据:
id user
1 zhangsan
2 zhangsan
3 zhangsan
4 lisi
5 lisi
6 lisi
7 zhangsan
8 zhangsan
Run Code Online (Sandbox Code Playgroud)
我想保持订单,并结合近乎相同的用户项目,该怎么做?当我使用shell脚本时,我会(文件测试中的数据):
cat test|cut -d " " -f2|uniq -c
Run Code Online (Sandbox Code Playgroud)
这将得到如下结果:
3 zhangsan
3 lisi
2 zhangsan
Run Code Online (Sandbox Code Playgroud)
但是如何使用sql呢?
如果你试试:
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;
Run Code Online (Sandbox Code Playgroud)
这给出了:
+------+--------+------+
| 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 |
+------+--------+------+
Run Code Online (Sandbox Code Playgroud)
那么你可以尝试:
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;
Run Code Online (Sandbox Code Playgroud)
这使
+-------+------+
| count | user |
+-------+------+
| 3 | a |
| 3 | b |
| 2 | a |
+-------+------+
Run Code Online (Sandbox Code Playgroud)
(我打电话给我的表foo,也只是使用的名称a和b因为我懒得写zhangsan,并lisi一遍又一遍).
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |