mysql分组GROUP BY常用sql

数据分组 GROUP BY

GROUP BY可以根据一个或多个字段进行分组。
比如,根据prod_id分组:

SELECT  prod_id ,user_id
FROM  products
GROUP BY  prod_id  

注意:
1.GROUP BY可以包含多个列。比如GROUP BY prod_id,user_id ;
2.GROUP BY如果分组列中具有NULL值,则NULL会作为一个分组返回。如果列中有多行NULL,它们将分为一组;
3.GROUP BY必须出现在WHERE子句之后,ORDER BY子句之前。

分组统计COUNT()

1.COUNT()函数:确定表中行的数目或符合条件的行的数目
注意:
COUNT(*)对表中行的数目进行计数,不管列中是否包含空值(NULL)或非空值。
使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
查询prod_id为10的商品数量:

SELECT COUNT(*) AS num  
FROM  products  
WHERE prod_id=10;

2.根据分组,统计数量
根据prod_id分组,并查询统计各组的数量

SELECT  prod_id ,COUNT(*)  AS num
FROM  products
GROUP BY  prod_id  

分组筛选 HAVING

1.筛选出订单数量大于2的用户id及其订单数量

SELECT user_id,COUNT(*) AS order_num
FROM orders
GROUP BY user_id
HAVING COUNT(*)>=2

2.筛选出订单数量大于2的用户id及其订单数量,并根据价格分组

SELECT prod_id,COUNT(*)
FROM  product 
WHERE price>10
GROUP BY prod_id
HAVING  COUNT(*)>=2
ORDER BY price

3.WHERE和HAVING的区别是什么?
WHERE过滤行,而HAVING过滤分组。

查找重复数据

1.查找全部重复记录

Select 字段 From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 HAVING COUNT(*)>1)

从user表中,取出 user_name字段相同的记录:

SELECT  id,user_name FROM user  WHERE  id    in ( SELECT id FROM  user  GROUP BY  id  HAVING COUNT(*)>1)

2.过滤重复记录(只显示一条)
从user表中,取出 user_name字段相同的记录中,id最大的那一行数据。

SELECT  id,user_name FROM user  WHERE  id  in ( SELECT max(id) FROM  user  GROUP BY  user_name )

参考资料:
《mysql必知必会》
https://blog.csdn.net/l1028386804/article/details/51733585

原文地址:https://www.cnblogs.com/expiator/p/10283980.html