Mysql 的分组数据(十)

timg.jpeg

本节将简单介绍分组数据,以便能汇总表内容的子集

分组数据

select sid, avg(score)
from sc
group by sid;

此查询语句返回了每个学生的平均分,输出为:

+------+------------+
| sid  | avg(score) |
+------+------------+
| 01   |   73.00000 |
| 02   |   70.00000 |
| 03   |   80.00000 |
| 04   |   63.33333 |
| 05   |   81.50000 |
| 06   |   32.50000 |
| 07   |   93.50000 |
+------+------------+

使用 WITH ROLLUP 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值,如

select sid, avg(score)
from sc
group by sid with rollup;

此查询语句返回了所有学生各自的平均分,以及所有学生的平均分,输出为:

+------+------------+
| sid  | avg(score) |
+------+------------+
| 01   |   73.00000 |
| 02   |   70.00000 |
| 03   |   80.00000 |
| 04   |   63.33333 |
| 05   |   81.50000 |
| 06   |   32.50000 |
| 07   |   93.50000 |
| NULL |   70.77778 |
+------+------------+

在具体使用 group by 子句前,需要知道一些重要的规定:

  1. group by 子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制
  2. 如果在 group by 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)
  3. group by 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 select 中使用表达式,则必须在 group by 子句中指定相同的表达式。不能使用别名
  4. 除聚集计算语句外, select 语句中的每个列都必须在 group by 子句中给出
  5. 如果分组列中具有 null 值,则 null 将作为一个分组 返回。如果列中有多行 null 值,它们将分为一组
  6. group by 子句必须出现在 where 子句之后, order by 子句之前

过滤数组

这里有另一种理解方法,where 在数据分组前进行过滤, having 在数据分组后进行过滤。这是一个重要的区别, where 排除的行不包括在分组中。这可能会改变计算值,从而影响 having 子句中基于这些值过滤掉的分组

select sid, avg(score) as score_avg
from sc
group by sid
having avg(score) > 70;

此查询语句返回了所有平均分大于 70 的数据,输出为:

+------+-----------+
| sid  | score_avg |
+------+-----------+
| 01   |  73.00000 |
| 03   |  80.00000 |
| 05   |  81.50000 |
| 07   |  93.50000 |
+------+-----------+

如何在一个查询语句中既使用 where 有使用 having,语句如下:

select sid, avg(score)
from sc
where score > 60
group by sid
having avg(score) >= 80;

此查询语句返回了分数在 60 分以上的所有平均分大于等于 80 的学生,输出为:

+------+------------+
| sid  | avg(score) |
+------+------------+
| 01   |   89.50000 |
| 03   |   80.00000 |
| 05   |   81.50000 |
| 07   |   93.50000 |
+------+------------+

分组和排序

一般在使用 group by 句时,应该也给出 order by 子句

比较类目 order by group by
作用 排序产生的输出 分组行。但输出可能不是分组的顺序
使用范围 任意列都可以使用(甚至非选择的列也可以使用) 只可能使用选择列或表达式列,而且必须使用每个选择列表达式
是否一定需要 不一定需要 如果与聚集函数一起使用列(或表达式),则必须使用
select sid, avg(score)
from sc
group by sid
having avg(score) >= 60
order by avg(score);

此查询语句表示查询所有平均分大于等于 60 的学生,并按照平均分排序,输出为:

+------+------------+
| sid  | avg(score) |
+------+------------+
| 04   |   63.33333 |
| 02   |   70.00000 |
| 01   |   73.00000 |
| 03   |   80.00000 |
| 05   |   81.50000 |
| 07   |   93.50000 |
+------+------------+

select 子句顺序

子句 说明 是否必须使用
select 要返回的列或表达式
from 从中检索数据的表 仅在从表选择数据时使用
where 行级过滤
group by 分组说明 仅在按组计算聚集时使用
having 组级过滤
order by 输出排序顺序
limit 要检索的行数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容