学习笔记,以代码和例子堆砌而成,方便查阅。
参考书籍:《Mysql必知必会》等

要点:GROUP BY子句、HAVING关键字


此Blog里的例子都会用下面grouping数据表:

# id, pro_version, price, pro_num
'1', '101', '20', '500'
'2', '101', '2', '1000'
'3', '101', '3', '250'
'4', '101', '10', '300'
'5', '102', '5', '200'
'6', '102', '3', '100'
'7', '103', '100', '30'

按照pro_version分组,并计算每组的个数。

SELECT pro_version,COUNT(*) AS num_prods FROM grouping GROUP BY pro_version;

输出:

# pro_version, num_prods
'101', '4'
'102', '2'
'103', '1'

对于GROUP BY我萌需要注意的是:

①GROUP BY子句可以包含任意数目的列,这使得能对分组进行嵌套,对分组进行更为细致的控制。

②GROUP BY子句中的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。

③除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY字句中给出。

④如果分组列中有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组。

⑤GROUP BY子句在WHERE子句之后,且在ORDER BY子句之前。

按照pro_version分组,计算每组的个数,并筛选出组数大于等于2的组。

SELECT pro_version,COUNT(*) AS num_prods FROM grouping GROUP BY pro_version HAVING COUNT(*)>=2;

输出:

# pro_version, num_prods
'101', '4'
'102', '2'

检索出price大于等于10的行,并将其按照pro_version分组,计算每组的个数,筛选出组数大于等于2的组。

SELECT pro_version, COUNT(*) AS num_prods FROM grouping WHERE price>=10 GROUP BY pro_version HAVING COUNT(*)>=2;

输出:

# pro_version, num_prods
'101', '2'

HAVING和WHERE非常类似,我们前几个part的Blog介绍的关于WHERE的技术都适用于HAVING,WHERE一般用于过滤行,而HAVING过滤分组。WHERE在数据分组前进行过滤,而HAVING在数据分组后进行过滤。

按照pro_version分组,计算每组price*pro_num总和,并筛选出price*pro_num总和大于等于2000的组,最后按price*pro_num总和的升序排列。

SELECT pro_version,SUM(price*pro_num) AS total FROM grouping GROUP BY pro_version HAVING SUM(price*pro_num)>=2000 ORDER BY total;

输出:

# pro_version, total
'103', '3000'
'101', '15750'

SELECT子句及其顺序:

子句 说明
SELECT 要返回的列或表达式
FROM 从中检索数据的表
WHERE 行级过滤
GROUP BY 分组说明
HAVING 组级过滤
ORDER BY 输出顺序数据
LIMIT 要检索的行数

初识Mysql(part11)--我需要知道的4条Mysql语句之分组相关推荐

  1. 初识Mysql(part19)--我需要知道的3条Mysql语句之组合查询

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UNION.UNION ALL 此Blog会用到下面2个表. temp_product2: # id, ...

  2. 初识Mysql(part17)--我需要知道的3条Mysql语句之联结

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:联结.INNER JOIN.ON关键字 此Blog会用到下面3个表. temp_store表: # p ...

  3. 初识Mysql(part16)--我需要知道的2条Mysql语句之子查询

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 此Blog会用到下面3个表. temp_store表: # pr_id, store_num '1001', ...

  4. 初识Mysql(part15)--我需要知道的4条Mysql语句之操作表

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:ALTER关键字.RENAME关键字.DROP关键字.ADD关键字 此Blog里的例子都会用下面的te ...

  5. 初识Mysql(part13)--我需要知道的7条Mysql语句之更新和删除数据

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:UPDATE关键字.IGNORE关键字.DELETE关键字.TRUNCATE TABLE语句 此Blo ...

  6. 初识Mysql(part12)--我需要知道的3条Mysql语句之插入数据

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:INSERT INTO子句 此Blog里的例子都会用下面的grouping表和grouping2表. ...

  7. 初识Mysql(part6)--我需要知道的4条Mysql语句之利用通配符过滤

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:LIKE关键字.通配符%.通配符_ 此Blog里的例子都会用下面store数据表: # id, pro ...

  8. 初识Mysql(part5)--我需要知道的11条Mysql语句之过滤

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:WHERE关键字.AND关键字.OR关键字.IS关键字.IN关键字 此Blog里的例子都会用下面int ...

  9. 初识Mysql(part4)--我需要知道的5条Mysql语句之排序

    学习笔记,以代码和例子堆砌而成,方便查阅. 参考书籍:<Mysql必知必会>等 要点:ORDER关键字.DESC关键字 按照price的大小对name和price列进行排序(默认升序). ...

最新文章

  1. 计算机硬件大型作业报告,计算机硬件技术大作业报告.doc
  2. Oracle 11g R2 RAC 高可用连接特性
  3. AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting
  4. java dump命令例子,常用命令示例
  5. Channel Allocation HDU1373
  6. android listview mapview,RelativeLayout和并列ListView/MapView
  7. 关于runc漏洞CVE-2019-5736的修复公告
  8. page compaction代码分析之一
  9. 网络是怎样连接的学习笔记1----探索浏览器内部(十分适合理清思路)
  10. 2008年全国计算机软考程序员考试大纲
  11. linux exosip编译,eXosip2 osip 编译安装
  12. 戴尔3080计算机重装系统步骤,终于发现戴尔笔记本重装系统的方法
  13. 区域卫生信息平台建设的“用友基因”
  14. TalkingData三大产品创新,引领2022数字营销技术新格局
  15. android聊天室背景图片,32张漂亮的自然风光微信7.0聊天背景图片推荐 唯美自然风景手机壁纸 (全文)...
  16. 使用Hexo 在本地搭建博客(一)
  17. OneZero第四周第二次站立会议(2016.4.12)
  18. 微信小程序九宫格预览+单张图片预览
  19. 优秀IT项目经理的基本要求
  20. 不同的经络,不同的线程

热门文章

  1. 微力同步linux,云端同步软件-微力同步下载 v2.4.3 官方版 - 下载吧
  2. types是什么意思中文翻译成_types 和 @types 是什么?
  3. Extjs09 双击事件
  4. Eclipse配置自动提示(eclipse设置代码API自动出现)
  5. python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
  6. SpringBoot+webservice
  7. PPT幻灯片转换成word的软件
  8. 在RelativeLayout中对控件的显示隐藏操作问题
  9. 无线路由器参数设置精通技巧
  10. applyDimension的用法