zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jsp类的封装集合的应用及servlet的引入和JSTL的引入
    jsp学习1
    小型世界关系图的交互可视化(未完成)
    c++产生随机数问题
    socket error
    opengl空间画圆柱体
    socket连接服务器立即返回,不用三次握手
    win7电脑分无线网,简称热点
    设置ipv6全球地址和默认网关
    网线制作,水晶头里的线顺序
  • 原文地址:https://www.cnblogs.com/expiator/p/10283980.html
Copyright © 2011-2022 走看看