GROUP BY

GROUP BY语句用来与聚合函数(aggregate functions such as COUNT, SUM, AVG, MIN, or MAX.)联合使用来得到一个或多个列的结果集。

语法如下:

SELECT column1, column2, ... column_n, aggregate_function (expression)            FROM tables            WHERE predicates            GROUP BY column1, column2, ... column_n;

举例

比如说我们有一个学生表格(student),包含学号(id),课程(course),分数(score)等等多个列,我们想通过查询得到每个学生选了几门课程,此时我们就可以联合使用COUNT函数与GROUP BY语句来得到这一结果

SELECT id, COUNT(course) as numcourseFROM studentGROUP BY id

因为我们是使用学号来进行分组的,这样COUNT函数就是在以学号分组的前提下来实现的,通过COUNT(course)就可以计算每一个学号对应的课程数。

注意

因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。

例如,对于上面提到的表格,我们做一个这样的查询:

SELECT id, COUNT(course) as numcourse, scoreFROM studentGROUP BY id

此时查询便会出错,错误提示如下:

Column ‘student.score’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

出现以上错误的原因是因为一个学生id对应多个分数,如果我们简单的在SELECT语句中写上score,则无法判断应该输出哪一个分数。如果想用score作为select语句的参数可以将它用作一个聚合函数的输入值,如下例,我们可以得到每个学生所选的课程门数以及每个学生的平均分数:

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscoreFROM studentGROUP BY id

HAVING

HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。

HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。

语法:

SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
WHERE predicates
GROUP BY column1, column2, ... column_n
HAVING condition1 ... condition_n;

同样使用本文中的学生表格,如果想查询平均分高于80分的学生记录可以这样写:

SELECT id, COUNT(course) as numcourse, AVG(score) as avgscoreFROM studentGROUP BY idHAVING AVG(score)>=80;

在这里,如果用WHERE代替HAVING就会出错

GROUP BY和having联合使用相关问题相关推荐

  1. 【调剂】985东南大学2020年苏州联合研究生院相关专业调剂信息

    点击文末的阅读原文或者公众号界面左下角的调剂信息或者公众号回复"调剂"是计算机/软件等专业的所有调剂信息集合,会一直更新的. 一.申请条件 1.本科阶段学习成绩优良,获得国家承认的 ...

  2. 【调剂】2021年东南大学苏州联合研究生院相关专业调剂信息

    点击文末的阅读原文或者公众号界面左下角的调剂信息或者公众号回复"调剂"是计算机/软件等专业的所有调剂信息集合,会一直更新的. 一.申请条件 1.本科阶段学习成绩优良,获得国家承认的 ...

  3. group by 和count 联合使用问题

    工作中要根据用户发布的产品数量来排序做分页,使用group by uid 用count(uid) 来统计的数量和想要的数量不正确. count统计的数量是被group by 分组以后每一组中数据的数量 ...

  4. mysql_group by与聚合函数、order by联合使用

    最近测试项目数据统计模块,发现自己对group by函数以及联合使用聚合函数的使用其实根本没理解透彻. 前半部分算自己对项目遇到情况的总结,大家可忽略,直接看后半部分关于group by的使用即可!! ...

  5. MySQL命令(二)| 表的增删查改、聚合函数(复合函数)、联合查询

    文章目录 新增 (Create) 全列插入 指定列插入 查询 (Retrieve) 全列查询 指定列查询 条件查询 关系元素运算符 模糊查询 分页查询 去重:DISTINCT 别名:AS 升序 or ...

  6. The Open Group 2018 北京峰会召开,看行业大咖都说了哈?

    The Open Group 2018 北京峰会"数字化时代企业变革与人才转型"于8月20日正式拉开帷幕.此次峰会汇集知名企业.国内外顶级专家共同分享数字业务转型.峰会由The O ...

  7. 美国餐饮连锁集团【CAVA Group】申请纽交所IPO上市

    来源:猛兽财经  作者:猛兽财经 猛兽财经获悉,来自美国的餐饮连锁集团[CAVA Group]近期已向美国证券交易委员会(SEC)提交招股书,申请在纽交所IPO上市,股票代码为(CAVA) ,CAVA ...

  8. MySQL中的联合索引学习教程

    MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...

  9. mysql使用group by实现组内排序实战

    一.前言 需求是:获取用户充值总数最多的前100名,并且获取最新充值的时间和充值数量 分析下: (1)首先是要获取用户充值的总数,然后进行排序取前100: (2)要获取用户的最新一次充值时间和金额,那 ...

最新文章

  1. 使用NPOI操作Excel
  2. 流式计算优化:时效性 [王方浩视角]
  3. eclipse版本详解以及下载安装步骤及启动eclispe报错整理
  4. 操作系统(李治军) L8 CPU管理的直观想法
  5. Postman转换为Jmeter
  6. MySQL(21)--- GROUP BY 语句
  7. oracle number长度转换,Oracle Number型数值存储与转换的实现详解
  8. Data Lake Analytics: 基于OSS文件自动推断建表
  9. python pip 安装
  10. 带有SeekBar的Android Media Player歌曲
  11. 【优化求解】基于matalb改进的遗传算法GA求解城市交通信号优化问题【含Matlab源码 214期】
  12. Error: spawn xxxx ENOENT原因与解决
  13. vue+elementUi——实现后台管理系统的布局(sideBar+header+appMain)
  14. Python中国象棋源代码及素材
  15. FMS4.5限制连接数
  16. R plot图片背景设置为透明_万能转换:R图转成Word、PPT、Excel、HTML、Latex、矢量图等...
  17. 将 hexo 部署到云服务器
  18. Docker部署homeassitant
  19. 使OEM分区变成可格式化
  20. Android11更新包,Android11系统

热门文章

  1. 系统安装初步之SlackwareLinux软体简介(转)
  2. 5G网络的主要特性、关键技术及其发展趋势 : 奇点临近——中国如何迎接未来的5G网络革命?
  3. Baby Q PK小冰 谁才是QQ6.7新增的QQ群聊机器人之王 ...
  4. VS Code 中 Vetur、prettier、ESLint 使用
  5. python中json与str转换和出现KeyError的解决方法
  6. 刘顺琦 - CSCI 561 midterm 2 basic knowledge
  7. WorldRemit携手Digicel International在太平洋岛屿实现移动钱包转账
  8. 【弗洛伊得算法的改良(可以求出具体的路径)】
  9. CSS实例之水平线变成虚线
  10. Eigenfunctions 特征函数 与 Eigenvalues