mysql groupby 怎么用

mysql groupby 怎么用,第1张

例如一个成绩表,包括学生id,科目,和各科分数score,要统计所有的人的总成绩,可以使用以下语句:

select id, sum(score) from 成绩表

group by id

语句顺序

select

选择的列

from

where

查询的条件

group

by

分组属性

having

分组过滤的条件

order

by

排序属性

limit

起始记录位置,取记录的条数

其中

select

选择的列

from

where

查询的条件

以上是基本的结构

group

by

分组属性

having

分组过滤的条件

这个是按照分组属性进行分组,所有分组属性上值相同的记录被分为一组,作为结果中的一条记录,后面的having是对分组进行过滤的条件,必须和group

by一起使用

order

by

排序属性

是对结果集合进行排序,可以是升序asc,也可以是降序desc

limit

起始记录位置,取记录的条数

对记录进行选取,主要用来实现分页功能

有时候我们需要更新table中分组排序后的第一条数据。比如:给各学科分数第一名的学生打标。

如上图所示,现在有一张学生成绩表,我想要各科第一名的学生打标,也就是向mark字段中写入“第一名”标记。那么预想得到的效果应该是这样的:

由于需要使用到group by , 所以需要先检查下mysql对应的sql_mode 是否包含 ONLY_FULL_GROUP_BY ,如果包含,则将sql_mode中的ONLY_FULL_GROUP_BY移除掉,否则下面的SQL可能执行不成功

上面sql中t0表为什么需要使用到DISTINCT,可以查看文章:

执行结果:

SQL分析:

上面的SQL感觉还是过于复杂了,看过下面的文章后:

可以将上面的SQL优化优化.....

优化版写法:

执行结果:

SQL分析:

执行结果:

SQL分析:

上面的SQL中使用到了窗口函数,关于窗口函数相关文章:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8588700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存