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中使用到了窗口函数,关于窗口函数相关文章:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)