• 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

  • 相关阅读:
    performance lazy-initialization
    Blazor项目文件分析
    Ubuntu 16.04重启Nautilus
    Ubuntu下查看APT安装的软件安装路径和版本
    Ubuntu 16.04搭建原始Git服务器
    Java原始封装常用HttpRequest
    CentOS 5/6安装后的必备设置(转)
    CentOS通过日志反查入侵(转)
    CentOS下防御或减轻DDoS攻击方法(转)
    通过LoadBalancerClient获取所有服务列表的IP
  • 原文地址:https://www.cnblogs.com/expiator/p/10283980.html
Copyright © 2020-2023  润新知