mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)

文章目录

    • 1.表一及相关题目
      • 查询class1班级英语平均分与class2中英语平均分的差值
      • 查询各班级法语成绩中低于班级法语平均分的人员个数
      • 查询每个班级中英语成绩最好的同学,结果输出:班级、姓名、分数
      • 对所有班级的同学英语成绩进行从高往低的排序,结果输出:排名 班级 姓名 分数
    • 2.表二及相关题目
      • 模块1>=60&模块2>=60 为通过,多次考试有一次通过为通过,查询结果显示如下(输出多次成绩中模块一加模块二成绩最高的)
    • 3.表三及相关题目(两表联合查询)
      • 查询订单申请时间在2020年4月份和5月份各申请人的合计订单总额,结果以订单总额降序排序
      • 去除英国、法国的订单,查询各年月的订单申请总额
    • 4.表四及相关题目(两表联合查询)
      • 查询2020年,每月的销售额,以及同比环比,并按照年月进行升序排序
      • 查询2020年起,每月的累计销售额

1.表一及相关题目

mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第1张图片
score表

查询class1班级英语平均分与class2中英语平均分的差值

SELECT score1-score2 差值 FROM
(SELECT ROUND(AVG(`GRADE`),2) score1 FROM `score` WHERE `COURSE`='English' AND `CLASSNO`='Class1') avgsc1,
(SELECT ROUND(AVG(`GRADE`),2) score2 FROM `score` WHERE `COURSE`='English' AND `CLASSNO`='Class2') avgsc2;

查询各班级法语成绩中低于班级法语平均分的人员个数

//创建只有法语成绩的视图
CREATE VIEW fren_score AS (SELECT * FROM score WHERE `COURSE`='French');

//根据fren_score视图进行查询
SELECT fren_score.`CLASSNO`,COUNT(1) FROM fren_score
JOIN (SELECT `CLASSNO`,AVG(`GRADE`) avgf FROM fren_score GROUP BY `CLASSNO`) fren01 
ON fren_score.`CLASSNO`=fren01.`CLASSNO` AND  fren_score.`GRADE`<fren01.avgf
GROUP BY fren_score.`CLASSNO`;

查询每个班级中英语成绩最好的同学,结果输出:班级、姓名、分数

//创建只有英语成绩的视图
CREATE VIEW  eng_score AS (SELECT * FROM `score` WHERE `COURSE`='English');

SELECT e1.`CLASSNO` '班级',e1.`NAME` '姓名',e1.`GRADE` '分数' FROM eng_score e1 
LEFT JOIN eng_score e2 ON e1.`CLASSNO`=e2.`CLASSNO` AND e2.`GRADE`>= e1.`GRADE`
GROUP BY e1.`STUDENTNO`
HAVING COUNT(1)=1;

对所有班级的同学英语成绩进行从高往低的排序,结果输出:排名 班级 姓名 分数

SELECT `CLASSNO` '班级',`NAME`'姓名',`GRADE` '分数',(@i:=@i+1)  '排名' FROM eng_score,(SELECT @i:=0) i
ORDER BY `GRADE` DESC;

2.表二及相关题目

mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第2张图片
score2表

模块1>=60&模块2>=60 为通过,多次考试有一次通过为通过,查询结果显示如下(输出多次成绩中模块一加模块二成绩最高的)

mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第3张图片
查询结果

//分别查询通过并显示最高成绩和未通过显示最高成绩,并用连接
(SELECT sc2.`id` '考试编号',sc2.`name` '姓名',sc2.`score1` '模块1考试成绩',sc2.`score2` '模块2考试成绩', 
 '考试通过' AS '考试结果' FROM 
(SELECT `name`,MAX(score1+score2) max_sc FROM score2 WHERE `score1`>=60 AND`score2`>=60 GROUP BY `name`) sc1
JOIN score2 sc2 ON sc1.`name`=sc2.`name` AND (sc1.max_sc=sc2.score1+sc2.score2)
)
UNION
(SELECT sc2.`id` '考试编号',sc2.`name` '姓名',sc2.`score1` '模块1考试成绩',sc2.`score2` '模块2考试成绩', 
 '考试未通过' FROM 
(SELECT `name`,MAX(score1+score2) max_sc FROM  score2  WHERE `name` NOT IN 
(SELECT `name` FROM `score2` WHERE `score1`>=60 AND`score2`>=60 GROUP BY `name`) 
GROUP BY `name`) sc1
JOIN score2 sc2 ON sc1.`name`=sc2.`name` AND (sc1.max_sc=sc2.score1+sc2.score2)
);

3.表三及相关题目(两表联合查询)

mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第4张图片
order_info表
mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第5张图片
sh_order表

查询订单申请时间在2020年4月份和5月份各申请人的合计订单总额,结果以订单总额降序排序

SELECT s.`or_customer` '申请人', SUM(`num`*`price`) '总价' FROM `order_info` o JOIN `sh_order` s  ON o.`id`=s.`id` WHERE YEAR(`or_date`)='2020' AND MONTH(`or_date`) IN (4,5)
GROUP BY `or_customer`
ORDER BY SUM(`num`*`price`) DESC;

去除英国、法国的订单,查询各年月的订单申请总额

SELECT DATE_FORMAT(`or_date`,'%Y-%m'), SUM(`num`*`price`) '总价' FROM `order_info` o JOIN `sh_order` s  ON o.`id`=s.`id` WHERE `country` NOT IN('英国','法国')
GROUP BY DATE_FORMAT(`or_date`,'%Y-%m')
ORDER BY SUM(`num`*`price`) DESC;

4.表四及相关题目(两表联合查询)

mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第6张图片
pro_info表
mysql 练习题(查询成绩最高、时间函数,本月合计,本月累计,同比,环比等)_第7张图片
sale_info表

查询2020年,每月的销售额,以及同比环比,并按照年月进行升序排序

//创建以月份为维度的销售额视图
CREATE VIEW sale_month AS 
(SELECT YEAR(s.`sale_time`) s_year,MONTH(s.`sale_time`) s_month,SUM(p.`price`*s.`num`) s_total 
FROM `pro_info` p JOIN `sale_info` s ON p.`pid`=s.`pid` 
GROUP BY DATE_FORMAT(s.`sale_time`,'%Y-%m') ORDER BY DATE_FORMAT(s.`sale_time`,'%Y-%m'));

SELECT CONCAT(s1.s_year,'-',s1.s_month) '时间', s1.s_total '销售额',((s1.s_total-s2.s_total)/s1.s_total) '环比',
 ((s1.s_total-s3.s_total)/s1.s_total)'同比' FROM sale_month  s1 
LEFT JOIN sale_month s2 ON (s1.s_year=s2.s_year AND s1.s_month=s2.s_month+1) OR(s1.s_year=s2.s_year+1 AND s1.s_month=s2.s_month-11)
LEFT JOIN sale_month s3 ON s1.s_year=s3.s_year+1 AND s1.s_month=s3.s_month;

查询2020年起,每月的累计销售额

//通过sql引用变量实现销售额累计
SELECT CONCAT(s_year,'-',s_month) '时间',(@sale_sum:=@sale_sum+s_total) '累计销售额' FROM sale_month ,(SELECT @sale_sum:=0) sale_sum WHERE s_year=2020;

你可能感兴趣的:(数据库,mysql,数据库,sql)