SQL函数计算和union

  • 截断平均值写法

    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   -- 只能在最后排序
    
  • 移动平均值需使用窗口函数,具体可参照窗口函数详情

猜你喜欢

转载自blog.csdn.net/weixin_44964850/article/details/123349119
今日推荐