MYSQL学习笔记(1)

题目复盘——聚合分组查询

题源牛客网——记录一下自己的学习

SQL14 得分求截断平均值

截断平均值:去掉一个最大值和一个最小值后的平均值。
题目描述

问题分析

(1)条件拆分:SQL类别+高难度————用WHERE限制;
(2)数据计算:去掉最大最小值————首先想到了排序之后LIMIT再AVG这样反而麻烦了————用(SUM-MAX-MIN)/COUNT最简洁;
(3)用户答题与难度类别对应起来————用JOIN ON内联结;
(4)结果保留一位小数————用ROUND(,1);

答案重写

SELECT tag,difficulty, 
ROUND(((SUM(score)-MAX(score)-MIN(score)))/(COUNT(score)-2),1) clip_avg_score
FROM examination_info e_i 
JOIN exam_record e_r ON e_i.exam_id=e_r.exam_id
WHERE tag='SQL' AND difficulty='hard';

细节问题

(1)最后示例输出中,完全没注意到保留几位小数的问题,也就没想到round(,);
(2)输入错误,出现列名英文输错的情况,应避免!

新知识

(1)JOIN…USING
using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条件;多表查询就使用多个这样的join。

 SELECT mm,nn FROM a_i 
 LEFT JOIN b_i USING(colA)
 LEFT JOIN c_i USING(colB);

要求colA在a_i,b_i中均存在,colB在a_i,c_i表中均存在。

SQL15 统计作答次数

题目描述

问题分析

(1)总作答次数————COUNT(start_time)或者COUNT(*)只要选择不忽略NULL的COUNT即可;
(2)试卷已完成作答次数————COUNT(submit_time) 指定列名会忽视空值;
(3)已完成试卷数————COUNT(DISTINCT IF(score IS NOT NULL,exam_id,NULL))去除重复项统计,一个试卷可以被很多人做过,并且去掉空值未提交的!

答案重写

SELECT COUNT(start_time) total_pv,
COUNT(submit_time<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值