MySQL详解 --- 聚合与分组

1. 聚合函数

聚合函数功能
count()统计满足条件的记录的行数
max()找出满足条件的记录的最大值
min()找出满足条件的记录的最小值
sum()统计满足条件的记录的值的和
avg()统计满足条件的记录的值的平均数

注意:

  • count函数的使用:
    count(*)、count(id)、count(1)。
    count(*)能统计一共有多少条记录,而count(id)是统计id列的非空值的记录数,也就是说它们的值可能不同。扩展阅读: MySQL:count(*),count(字段),count(1)的区别

  • 在聚合函数的查询语句中,不能查询除了聚合函数和分组字段之外的字段,因为这样没有意义(一般数据库会报错)。

    select max(age) from stu
    select max(age),name from stu ×

  • 聚合函数一般配合group by一起使用

  • 聚合函数在配合group by时,可以额外查询分组字段

    select max(age), gender from stu group by gender

2. 分组查询

 分组查询就是将原有的数据进行分组统计。

select 分组列名1, 分组列表2, 聚合函数1, 聚合函数2 from 表名
group by 分组列名1, 分组列名2;

从格式我们可以看出,分组是可以根据多个字段进行分组的。

• 分组后的条件筛选

select 分组列名, 聚合函数 from 表名
[where 条件1]
group by 分组列名
[having 条件2(可以根据聚合函数的值进行判断)];

我们既可以用where进行条件筛选,也可以用having进行条件筛选。但是这两者放置的位置以及代码执行的逻辑是不同的!

注意:

  • select中出现的字段,必须在分组当中。
  • having子句中出现的条件判断的字段,也必须在分组当中。

例子:

-- 1
select gender, max(age) from student
where gender='男'
group by gender;

-- 2
select gender, max(age) from student
group by gender
having gender='男';

对于示例1,where是对from和select的结构进行筛选的,在经过这一层筛选后,再执行group by进行分组。

对于实例2,having是对group by进行筛选的,在group by执行完毕后,再进行筛选。

SQL查询中各个关键字的执行先后顺序:

from > on > join > where > group by > with > having > select > distinct > order by > limit

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL中,GROUP BY关键字用于根据指定的列或表达式对查询结果进行分组分组条件可以是一个或多个列,也可以是一个表达式。通过使用GROUP BY关键字,查询结果将按照指定的分组条件进行分组,并只显示每个分组的第一条记录。 举个例子,假设我们有一个employee表,其中包含员工的信息,包括d_id(部门ID)和sex(性别)两列。如果我们想要根据部门ID和性别对员工进行分组,我们可以使用以下的SELECT语句: SELECT * FROM employee GROUP BY d_id,sex; 这样查询的结果将按照部门ID和性别进行分组,并只显示每个分组的第一条记录。 需要注意的是,如果GROUP BY关键字不与聚合函数一起使用,那么查询结果就是字段取值的分组情况。字段中取值相同的记录会被视为一组,但是只会显示该组的第一条记录。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL分组group by详解](https://blog.csdn.net/m0_37583655/article/details/113136199)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL对数据表进行分组查询(GROUP BY)](https://blog.csdn.net/qq_21794887/article/details/94639378)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值