分组查询

之前学习聚合函数,知道聚合函数在默认情况下,将会把所有的记录当成一组,让我们在对列求值,计算时更方便了一些。

但是,在某些情况下,我们需要显式地对记录进行分组,使用的是group by [column1,column2..]。

这样,查询结果将会根据group by后面的字段,将值相同的记录分成一组。举个例子,我有一份管理学生信息的表,这时候我想查一下男生和女生各多少人,男生总分最高是谁等等,我们完全可以通过group by 性别字段进行操作。

具体应用

暂时忽略数据的正确性,先创建一个表,如下:

CREATE TABLE tab(

NAME VARCHAR(10),

score INT,

gender CHAR(2),

salary INT

);

INSERT INTO tab VALUES('马超',80,'男','1000');

INSERT INTO tab VALUES('小乔',60,'女','1000');

INSERT INTO tab VALUES('曹操',90,'男','2000');

INSERT INTO tab VALUES('貂蝉',55,'女','1000');

SELECT * FROM tab;

由于截图过于丑陋,索性直接写出来吧:

| name | score | gender | salary|

| 马超 | 80 | 男 | 1000 |

| 小乔 | 60 | 女 | 1000 |

| 曹操 | 90 | 男 | 2000 |

| 貂蝉 | 55 | 女 | 1000 |

先来看一个错误案例:

-- 按性别分组,name的位置将会只显示一个,name不具有共性

SELECT NAME,gender FROM tab GROUP BY gender;

结果如下:

| name | gender |

| 马超 | 男 |

| 小乔 | 女 |

可以看到,确实按照性别分成了两组,但是曹操和貂蝉都从表中消失了,是因为如果某个记录没有出现在group by之后或者没有用聚合函数扩起,就会输出该列的第一条记录的值。

分组查询通常和聚合函数配套使用,效果俱佳,比如下面:

-- 依据性别分组,分别查询男或女的人群中各自的平均分,各自的人数,各自里的最大工资

SELECT gender,AVG(score),COUNT(gender),MAX(salary) FROM tab GROUP BY gender;

| gender | avg(score) | count(gender) | max(salary) |

| 男 | 85.0000 | 2 | 2000 |

| 女 | 57.5000 | 2 | 1000 |

where和having

同样的之前学习过where关键字表示条件,分组查询中还有个having关键字用于筛选,来细品。

-- 在上面的基础上加一个条件,如果分数不是60或80,就不参与分组,貂蝉和曹操就尴尬离去了。

SELECT gender,AVG(score),COUNT(gender),MAX(salary) FROM tab WHERE score IN (60,80) GROUP BY gender;

| gender | avg(score) | count(gender) | max(salary) |

| 男 | 80.0000 | 1 | 1000 |

| 女 | 60.0000 | 1 | 1000 |

-- 加上的条件为,如果查询出来的结果平均分大于60才会被显示出来

SELECT gender,AVG(score),COUNT(gender),MAX(salary) FROM tab GROUP BY gender HAVING AVG(score)>60;

| gender | avg(score) | count(gender) | max(salary) |

| 男 | 85.0000 | 2 | 2000 |

总结:

where子句用于过滤行,在分组之前进行限定,且子句不能使用聚合函数。

having子句用于过滤组,在分组之后对结果进行限定,且可以配合使用聚合函数。

mysql分组和where条件查询_【MySQL】:分组查询where和having相关推荐

  1. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  2. oracle 查询天,Oracle查询_ 单表查询

    前面我们详解了关于Oracle的增删改,今天让我们接着来学习Oracle的查询吧, Oracle中查询可是重头戏噢!!!跟着煌sir的步伐,走位,走位~~~ 小知识锦囊 在此前,先讲解一个小知识点 O ...

  3. MySQL笔记:第06章_多表查询

    第06章_多表查询 多表查询概述 1.一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 演示代码 2. 多表查询分类讲解 分类1:等值连接 vs 非等值连接 等值连接 非 ...

  4. mysql自定义两个条件排序_使用MySQL中的两个不同列进行自定义排序?

    为此,将ORDER BY子句与CASE语句一起使用.让我们首先创建一个表-mysql> create table DemoTable1610 -> ( -> Marks int, - ...

  5. java数据查询_数据的查询

    -- 创建数据 CREATE DATABASE day2; -- 使用数据库 USE day2; -- 创建一个表格 CREATE TABLE stu( id INT, NAME VARCHAR(20 ...

  6. dynamodb分页查询_使用DynamoDBMapper查询DynamoDB项目

    dynamodb分页查询 在上一篇文章中,我们使用底层Java api在DynamoDB数据库上发出了查询. 使用DynamoDBMapper进行查询非常简单. 使用哈希键发出查询非常简单. 这样的查 ...

  7. sql \n 查询_探索SQL查询提示选项(快速N)

    sql \n 查询 In this article, we will introduce SQL queries hint and will analyze the OPTION(Fast 'N') ...

  8. oracle之子查询_,Oracle子查询详解

    Oracle子查询详解,根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询, 子查询概念 :当一个查询的结果是另一个查询的条件时,,称之为子查询. 使用子查询注意事项: 子查 ...

  9. 如何根据vin码查询_车架号查询-VIN查询-车辆识别码查询-宜配网

    请输入17位车架号码: 通过车架号查询车辆信息,在销售配件,二手车交易中十分重要,宜配网车架号在线查询系统,提供免费的车架号查询. 宜配网解码了全球大多数主流车型的车架号,宜配网车架号在线查询系统,不 ...

  10. mysql 检索操作时间段_postgresql数据库使用说明_实现时间范围查询

    按照日期查询通常有好几种方法: 按照日期范围查询有好几种方法,日期字段类型一般为: Timestamp without timezone 方法一: select * from user_info wh ...

最新文章

  1. linux 进程内存分布及 堆分配和栈分配的特点
  2. WIN8.1 PRO RTM VOL.2013.09.18
  3. BI报表开发之环境搭建(二)
  4. Android wifi ADB的使用
  5. Asp.net2.0 学习资源(转载)
  6. 原生js---ajax---post方法传数据
  7. spring事物管理--声明式(AspectJ)注解实现 (推荐使用)
  8. nodejs的事件处理机制
  9. php -q poller.php --force,php – 为什么Cacti一直在等待死的轮询进程?
  10. C++11::lambda 的用法
  11. matplotlib简介
  12. 服务器处理蜘蛛抓取网页的过程,搜索引擎抓取网页的蜘蛛爬行流程
  13. 计算机应用基础课程思政方案,课程思政《计算机应用基础》教学设计.pdf
  14. visual studio 版本的区别
  15. 关于安卓毛玻璃实现(一)动态毛玻璃
  16. 【虹科技术分享】如何测试 DNS 服务器:DNS 性能和响应时间测试
  17. 大型网站图片服务器架构的演进!
  18. 听云-服务器监控,window+tomcat配置
  19. 视频gif如何制作?试试这个视频制作gif神器
  20. python作图——线型图,饼形图

热门文章

  1. TensorFlow(7)卷积神经网络实战(1)(可视化)
  2. 吴恩达神经网络和深度学习——第二周笔记
  3. 设置WebStrom切换最近打开过的项目快捷键Alt+E
  4. 【力扣网练习题】删除排序数组中的重复项
  5. VSCode设置折叠左侧资源管理器所有文件夹的快捷键Alt+X、切换左侧活动栏显示隐藏快捷键Alt+Q
  6. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)
  7. python简说(十五)MD5加密
  8. 分割catalina.out 每天生成一个文件
  9. BZOJ 4595 SHOI2015 激光发生器 射线,线段,偏转
  10. Redis3.0 配置文件说明