-
截断平均值写法
SELECT b.tag, b.difficulty, -- 去掉最大值与最小值取平均,保留一位小数 ROUND(( SUM( a.score )- MAX( a.score )- MIN( a.score ))/( COUNT( score )- 2 ), 1 ) FROM examination_info b LEFT JOIN exam_record a ON b.exam_id = a.exam_id WHERE b.tag = "SQL" AND b.difficulty = "hard"
-
大于平均值的最小值查询
子查询除大于平均值的值。再查找符合条件的最小值。切记:一定要再次连接查询。否则会查询大于SQL均值的所有值,而不是只大于SQL均值的SQL值。SELECT MIN( score ) FROM exam_record er JOIN examination_info ei ON er.exam_id = ei.exam_id WHERE ei.tag = 'SQL' AND score >= ( SELECT AVG( score ) FROM examination_info a LEFT JOIN exam_record b ON a.exam_id = b.exam_id WHERE a.tag = "SQL" )
-
月度天数计算
SELECT LAST_DAY(submit_time), -- 月度最后一天 DATE(DATE_ADD( submit_time, INTERVAL - DAY ( submit_time )+ 1 DAY )), -- 月度第一天 DATEDIFF(LAST_DAY(submit_time),DATE(DATE_ADD( submit_time, INTERVAL - DAY ( submit_time ) DAY ))), -- 该月一共有几天(法1) DAY(LAST_DAY(submit_time)) -- 该月一共有几天(法2) from practice_record
-
UNION
- 在使用union这个关键字时,被union的多个查询结果各自不可先自行order by,而要先将它们union起来后,再根据某个字段进行order by。
- UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT DATE_FORMAT( submit_time, '%Y%m' ) as submit_month , COUNT( question_id ) `month_q_cnt`, ROUND( COUNT( question_id )/ DAY ( LAST_DAY( max( submit_time ) )), 3 ) `avg_day_q_cnt` FROM practice_record WHERE YEAR ( submit_time )= '2021' AND score IS NOT NULL GROUP BY DATE_FORMAT( submit_time, '%Y%m' ) UNION all SELECT CONCAT( YEAR ( MIN( submit_time )), '汇总' ) `submit_month `, COUNT( 1 ) `month_q_cnt`, ROUND( COUNT( question_id )/ 31, 3 ) `avg_day_q_cnt` FROM practice_record WHERE YEAR ( submit_time )= '2021' AND score IS NOT NULL ORDER BY submit_month -- 只能在最后排序
-
移动平均值需使用窗口函数,具体可参照窗口函数详情
SQL函数计算和union
猜你喜欢
转载自blog.csdn.net/weixin_44964850/article/details/123349119
今日推荐
周排行