MySQL 关键语法指南

MySQL 关键语法:

  • group by (分组统计);
  • having (分组过滤);
  • 统计相关:count (求总数),sum (求和),max (求最大值),min (求最小值),avg (求平均值)

1、group by

  • 满足 “select 子句中的列名必须为分组列或者列函数”;
  • 列函数对于 group by 子句定义的每个组各返回一个结果。
表名 表字段 说明
student student_id、name、age、sex 学生表,student_id 是主键
score student_id、course_id、score 成绩表,无主键
course course_id、name 课程表,course_id 是主键
# 查询所有同学的学号、选课数、总成绩
select student_id,count(course_id),sum(score) 
from score 
group by student_id; # group by student_id 表示按学号分组

列函数对于 group by 子句定义的每个组各返回一个结果,如果用 group by,那么你的 select 语句中选出的列要么是你 group by 里用到的列,要么就是带有之前说的如 sum、min 等列函数的列。

# 查询所有同学的学号、姓名、选课数、总成绩
select s.student_id,stu.name,count(s.course_id),sum(s.score) 
from 
  score s,
  student stu
where s.student_id = stu.student_id # where 必须写在 group by 之前
group by s.student_id;

2、having

  • 通常与 group by 子句一起使用;
  • where 过滤行,having 过滤组;
  • 出现在同一 SQL 的顺序是 where -> group by -> having,调整顺序会报错。
# 查询平均成绩大于60分的同学的学号和平均成绩
select student_id,avg(score) 
from score 
group by student_id
having avg(score)>60;
# 查询没有学全所有课的同学的学号、姓名
select stu.student_id,stu.name
from 
  student stu,
  score s
where stu.student_id = s.student_id
group by stu.student_id
having count(*) < (
  select count(*) from course # 课程总数
);

你可能感兴趣的:(MySQL 关键语法指南)