mysql - 如何通过SQL合并相似的项目?

标签 mysql sql

我的数据库中有一些数据:

id user 
1 zhangsan 
2 zhangsan 
3 zhangsan 
4 lisi 
5 lisi 
6 lisi 
7 zhangsan 
8 zhangsan 

我想保持顺序,并合并附近相同的用户项目,该怎么做? 当我使用shell脚本时,我会(文件test中的数据。):

cat test|cut -d " " -f2|uniq -c 

这将得到结果:

   3 zhangsan 
   3 lisi 
   2 zhangsan 

但是如何使用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;

这给出:

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

那么你可以尝试:

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;

这给出

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

(我将我的表命名为foo,并且只使用了名称ab,因为我懒得写zhangsanlisi 一遍又一遍)。

关于mysql - 如何通过SQL合并相似的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172006/

相关文章:

mysql.h 丢失....(Ruby on Rails,OSX)

mysql - 使用多对多相同类型关系表排除 SELECT 上的相似行

php - 如何将数据复制到另一个表并避免键冲突?

mysql - 找到 super 键

sql - 按年计算工资

sql - 恢复数据库SQL Server查询

sql - 使用 Join 选择数据

.net - 如何命名在存储过程中返回的数据集的表?

php - 删除时数组到字符串的转换

java - 如何在给定场景中使用 hibernate 级联?