例题:

每个学生选课最多的前三名

数据:

代码:
SELECT name FROM student
group by name 
ORDER BY count(count_id) desc
limit 3

group by 

  • 配合聚合函数使用,可以实现去重(distinct)的效果。
  • 根据某个字段分组的效果如图:所以除了name字段,其他的字段都需要使用聚合函数(count、sum)等,直接select * 会报错。

order by 

  • 用来排序、默认为升序(asc)
  • 也可以指定为降序(desc)


limit

  • 多用于排序之后寻找前几位的数值、或者后几位的数值。等价于聚合函数max或者min。
  • 例如:max(age) <==> order by age limit 1


having by

  • 聚合函数作为限定条件时使用,此时不能使用where。
  • 例如:
需要返回平均年龄大于20的数据:having by avg(age) > 20;

union
去重或者不去重、有先后输出顺序的情景使用。而不使用or
  • union all:不去重
  • union:去重

常见的函数使用

case函数的使用


代码片段:


日期的使用



字符串的截取



条件判断

sum(if(result = ‘right’, 1, 0))as right_question



窗口的使用

over(partition by 分组 order by 排序)
例题链接:https://leetcode-cn.com/problems/game-play-analysis-iii/

四舍五入

round(date数据,几位小数)

总结