当前位置: 首页 > news >正文

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

分组数据

  • 创建分组
  • 过滤分组
  • SQL 子句顺序

创建分组

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;
-- 结果如下:
customer_id		total_amount
-----------		------------
BRS01			2314.2
DLL01			41233
FNG02			991.32
  • 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;
  • 注意: 不要理解为有了 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;
  • WHERE 语句过滤出 12 个月内的所有订单;
  • HAVING 语句过滤出所有大于 2 个订单的顾客;

SQL 子句顺序

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

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


以上

http://www.lryc.cn/news/205452.html

相关文章:

  • “唯品会VIP商品API:一键获取奢侈品详情,尊享品质生活!“
  • uniapp解决iOS切换语言——原生导航栏buttons文字不生效
  • idea 基础设置
  • Rockchip Uboot CmdLine 作用 来源 常用参数
  • MySQL表导出
  • HTML页面获取URL传递的参数值
  • mac安装jenkins
  • asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • 动手学深度学习——第五次学
  • python实验16_网络爬虫
  • 家长扫码查成绩
  • 【转】多台服务器共享session问题
  • 页面置换算法的模拟实现及命中率对比
  • 说一说ajax的请求过程?
  • leetcode 84. 柱状图中最大的矩形
  • ubuntu 安装 gnome 安装 xrdp
  • 微信小程序——后台交互
  • 3D模型如何添加表面贴图?
  • C语言之函数详解
  • 华纳云:mysql创建触发器报错的原因及解决方法是什么
  • C++笔记之初始化二维矩阵的方法
  • ArrayList与List的层级关系及ArrayList解析
  • 智慧公厕设备选型攻略,打造智能化便利生活体验
  • TCP 协议的可靠传输机制是怎样实现的?
  • Antv G6入门之旅--combo图
  • 聊聊分布式架构09——分布式中的一致性协议
  • 探索流视频的发送
  • [ACTF2020 新生赛]Include 1
  • 教师必备宝藏,强烈推荐
  • 「北大社送书」学习MATLAB—从算法到实战