1.汇总分析

count、sum、avg、max、min

-- count 算出教师数:SELECT COUNT(教师姓名) FROM teacher;(剔除空值计算)




mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql


-- count 算出全部行数: SELECT COUNT(*) FROM teacher;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql_02


-- avg 算出平均成绩:SELECT AVG(成绩) FROM score;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_数据_03


-- max min 算出最高、最低成绩: SELECT MAX(成绩),MIN(成绩) FROM score;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_04


-- DISTINCT 取消重复值:SELECT COUNT(DISTINCT 姓名) FROM student;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_05


练习1:-- 查询课程号为"0002"的总成绩:

SELECT SUM(成绩) FROM score WHERE 课程号='0002';


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_数据_06


练习2 -- 查询选了课程的学生人数:

SELECT COUNT(DISTINCT 学号) FROM score;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_数据_07


2.分组:group by

-- GROUP BY 计算男女类别人数:

SELECT 性别,COUNT(*) as '学生人数' FROM student WHERE 出生日期>'1990-01-01' GROUP BY 性别;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_08


运行顺序:from子句——where子句——group by子句——select子句

练习1 -- 查找各科成绩最高分、最低分:

SELECT 课程号,MAX(成绩) as '最高分',Min(成绩) as '最低分' FROM score GROUP BY 课程号;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql_09


练习2 -- 查找每门课程选修的学生数:

SELECT 课程号,COUNT(学号) as 学生数 FROM score GROUP BY 课程号;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_升序_10


练习3 -- 查找男生、女生人数:

SELECT 性别,COUNT(学号) as 学生数 FROM student GROUP BY 性别;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql_11


3.对分组结果指定条件

where 指定行的条件;having 对分组结果指定条件

-- 取出男生组:

SELECT 性别,COUNT(*) as 学生数 FROM student GROUP BY 性别

HAVING COUNT(*)>1;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_12


运行顺序: from 从哪张表中查找数据 ——where 查询条件——group by 分组——having 对分组结果指定条件——select 查询结果

练习1 -- 平均成绩>60学生学号和平均成绩:

SELECT 学号,AVG(成绩) as 平均成绩 FROM score GROUP BY 学号

HAVING AVG(成绩)>60;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_13


练习2 -- 至少选修2门课程学生学号:

SELECT 学号,count(课程号) as 课程数 FROM score GROUP BY 学号

HAVING count(课程号)>=2;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_数据_14


练习3 -- 查询同名同姓学生名单并统计同名人数:

SELECT 学号,姓名,count(姓名) as 人数 FROM student GROUP BY 姓名

HAVING count(姓名)>=2;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_升序_15


4.用sql解决业务问题

翻译成大白话、写出分析思路、写出对应的sql子句

练习 -- 平均成绩>=80课程成绩:

SELECT 课程号,AVG(成绩) as 平均成绩 FROM score GROUP BY 课程号

HAVING AVG(成绩)>=80;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_升序_16


5.对查询结果排序

order by asc 升序、order by desc 降序

运行顺序: from 从哪张表中查找数据 ——where 查询条件——group by 分组——having 对分组结果指定条件——order by 对查询结果排序——select 查询结果

从查询结果取出指定行:limit

练习 1 -- 查询不及格课程并按课程号从大到小排列

SELECT 课程号,成绩 from score WHERE 成绩<60 ORDER BY 课程号 desc;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql查询成绩最高分_17


练习2 -- 查询每门课平均成绩,平均成绩升序排列,课程号降序排列

SELECT 课程号,AVG(成绩) as 平均成绩 from score GROUP BY 课程号

ORDER BY AVG(成绩) ASC,课程号 desc;


mysql面试题 找出单科最高分的学生和分数 查询各科最高分sql_sql_18


6.如何看懂报错信息

where子句中不能使用count子句;字符串类型的数字,需先修改数据类型

运行顺序: from 从那张表中查找数据 ——where 查询条件——group by 分组——having 对分组结果指定条件———select 查询结果——order by 对查询结果排序——limit 从查询结果取出指定行