第八章 - 数据分组( group by , having , select语句顺序)
创始人
2024-05-26 04:06:39

第八章 - 数据分组 group by

    • 数据分组
    • 过滤分组 having
    • 分组排序
    • groub by语句的一些规定
    • select语句顺序

数据分组

  • 在使用group by进行分组时,一般都会配合聚合函数一起使用,实现统计数据的功能。
  • 比如下面例子,需要按性别计算人数。按性别进行分组然后通过count()函数来计算每个性别有多少条数据。
selectsex as `性别`,count(sex) as `人数`
fromtest.titanic
group bysex

在这里插入图片描述

  • 在比如计算不同性别中年龄最大的是多少,年龄最小的是多少,年龄平均值是多少(保留两位小说)。
  • round(x,y) 为保留小数位数函数,括号内两个参数,逗号左边的x表示传入的具体数值,逗号右边的y表示要保留小数的位数是几位。小数采用四舍五入。
selectsex as `性别`,max(age) as `最高年龄` ,min(age) as `最小年龄`,# 计算均值并保留两位小数round(avg(age),2) as `平均年龄`
fromtest.titanic
group bysex

在这里插入图片描述

过滤分组 having

  • having 非常类似与 where,由于where的执行优先级要高于group by,要实现group by分组之后再过滤就需要用到having来进行分组过滤了。
  • 下面例子实现,票价Fare,卖出去5张以上的票都有哪些且卖出去的多少张。
select
Fare,
count(Fare)
from
test.titanic
group by
Fare
having
count(Fare) > 5

在这里插入图片描述

分组排序

  • 再前面的例子中输出的结果是没有排序的,所以看起来有些麻烦,而且也不能就这么把数据给别人看。如果在分组过滤后再把得出的结果进行排序,哪看起来就会舒服一些。
  • 如何实现分组排序呢,只需要再后面再添加order by进行排序就可以了,如下
selectFare,count(Fare) as `数量`
fromtest.titanic
group byFare
havingcount(Fare) > 5
order by# 对结果进行倒序排列`数量` desc
  • 在order by中可以直接使用as设置的别名。

groub by语句的一些规定

  • group by语句可以包含任意数目的列。
  • 如果使用了多个列的分组,在建立分组时,指定的所有列都一起计算,不能从个别的列取回数据。
  • 使用group by 分组时,每个列都必须是有效的列名或是有效的表达式(不能是聚合函数),如果在select中使用表达式,那么在group by中必须指定相同的表达式,不能使用别名。
  • 除了聚合函数计算语句外,select语句中的每个列都必须在group by语句中给出。
  • 如果分组列中具有null值,则null将作为一个分组返回,如果类中有多行null值,他们将分为一组。
  • group by必须出现在where之后,order by 之前。

select语句顺序

在使用select查询语句时,系统执行时遵循下面的次序,次序不对系统就会报错无法执行查询。

  • select
  • from
  • where
  • group by
  • having
  • order by
  • limit

相关内容

热门资讯

地方两会|江苏省人大代表杨东升... 中经记者 方超 石英婧 上海报道制造业综合实力领跑全国的“苏大强”江苏省,当下仍在持续擦亮制造业“金...
首次有台商品牌入选 旺旺集团获... (来源:上观新闻)2月3日,工业和信息化部办公厅公布2025年度“中国消费名品”名单,首次有台商品牌...
抖音公告:无限期封禁! 据@抖音黑板报,近期,冬奥会、乒乓球亚洲杯等重要体育赛事临近,平台发现部分违规用户借机制造“饭圈”矛...
山西:今年“千企百展”行动计划... 1月23日,为深入贯彻落实省委省政府稳外贸决策部署,支持企业开拓国际市场、提升国际化经营能力,省商务...