第八章 - 数据分组( 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

相关内容

热门资讯

王传福:我直管的总经理,一半出...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! (来源:第一财经资讯...
财联社创投通:一级市场本周融资... 转自:财联社【财联社创投通:一级市场本周融资总额约132.73亿元环比增加84.04% 先进制造、医...
市妇联: 架起维权公益服务“连... (来源:廊坊日报)转自:廊坊日报 本报讯(记者 陈正)自全市“法治为民·法治护企办实事”活动...
“中国茅台号”“茅台1935号... (来源:文旅中国)12月26日,由中国贵州茅台酒厂(集团)有限责任公司与多彩贵州航空公司联合打造的“...
连续四个月保持增长!重要数据公... 国家统计局12月27日发布数据显示,1—11月份,全国规模以上工业企业实现利润总额66268.6亿元...