• 【数据库】分组数据 GROUP BY、HAVING


    创建分组

    s q l sql sql 中,使用 GROUP BY 子句对数据进行分组。分组通常与聚合函数一起使用,以对每个组内的数据执行聚合操作;

    e . g . e.g. e.g. 按照客户分组,计算每个客户的订单总金额;

    SELECT customer_id, SUM(order_amount) AS total_amount
    FROM Orders
    GROUP BY customer_id;
    
    • 1
    • 2
    • 3
    -- 结果如下:
    customer_id		total_amount
    -----------		------------
    BRS01			2314.2
    DLL01			41233
    FNG02			991.32
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • GROUP BY 子句对每个组进行聚集,所以此时 SUM() 函数的值将是每个“组”的金额总值,而不是整个数据库中的总金额;
    • 如果分组中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组;
    • GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。

    过滤分组

    实现分组过滤使用的关键词是 HAVING
    HAVING 关键词的作用与 WHERE 关键词的作用一样,只不过 WHERE 作用于行,HAVING 作用于组。

    e . g . e.g. e.g. 过滤出 Orders 表中 ≥ 2 个订单的顾客信息;

    SELECT cust_id, COUNT(*) AS order_num
    FROM Orders
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;
    
    • 1
    • 2
    • 3
    • 4
    • 注意: 不要理解为有了 HAVING 不能有 WHERE,两者可以共存;

    e . g . e.g. e.g. 过滤出过去 12 个月内 ≥ 2 个订单的顾客信息;

    SELECT cust_id, COUNT(*) AS order_num
    FROM Orders
    WHERE order_date >= DATE_SUB(NOW(), INTERVAL 12 MONTH)
    GROUP BY cust_id
    HAVING COUNT(*) >= 2;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • WHERE 语句过滤出 12 个月内的所有订单;
    • HAVING 语句过滤出所有大于 2 个订单的顾客;

    SQL 子句顺序

    本节内容增添了两个 SQL 子句,关于子句的顺序需要注意;

    子句说明是否必须使用
    SELECT要返回的列和表达式
    FROM表名
    WHERE过滤(行)
    GROUP BY分组
    HAVING过滤(组)
    ORDER BY排序


    以上

  • 相关阅读:
    【聚类】DBCAN聚类
    Unknown module(s) in QT: texttospeech
    OpenCV图像处理——停车场车位识别
    STM32-通用定时器
    数学建模笔记:TOPSIS方法(优劣解距离法)和熵权法修正
    vue2适配手机端
    Android Studio中BitmapDrawable的使用2-1
    LESS vs. SCSS:选择何种CSS预处理器?
    牛客刷题——前端面试【四】谈一谈async 函数、await表达式
    Nginx转发丢失cookie表现形式以及解决方案
  • 原文地址:https://blog.csdn.net/weixin_43098506/article/details/133994827