文章目录
1.表一及相关题目
score表
sql
查询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.表二及相关题目
score2表
bash
模块1>=60&模块2>=60 为经过,屡次考试有一次经过为经过,查询结果显示以下(输出屡次成绩中模块一加模块二成绩最高的)
查询结果
spa
//分别查询经过并显示最高成绩和未经过显示最高成绩,并用链接 (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.表三及相关题目(两表联合查询)
order_info表
sh_order表
3d
查询订单申请时间在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.表四及相关题目(两表联合查询)
pro_info表
sale_info表
code
查询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;