牛客网-刷SQL(10)

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。

示例:user_profile

iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt
12138male21北京大学3.47212
23214male复旦大学415525
36543female20北京大学3.212330
42315female23浙江大学3.6512
55432male25山东大学3.8201570
62131male28山东大学3.315713
74321female26复旦大学3.69652

根据示例,你的查询结果应参考以下格式,输出结果按university升序排序:

device_iduniversitygpa
6543北京大学3.2000
4321复旦大学3.6000
2131山东大学3.3000
2315浙江大学3.6000

解题思路:
找到每个学校gpa最低的同学

  • 学校分组、使用min()函数
  • 第一步查最小值
  • 第二步用最小值作为条件,查询出其他字段
  • 三步添加排序关键字order by
select device_id , university , gpa
from user_profile 
where gpa in (
select min(gpa) from user_profile
group by university
)
order by university

SQL语句的执行顺序如下:

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. HAVING
  7. SELECT
  8. DISTINCT
  9. ORDER BY

这个顺序中,所有的查询语句都是从FROM开始执行的。在实际执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。

错误sql分析如下:

select device_id,university,min(gpa) gpa
from user_profile 
group by university

这段错误diamante主要错在 device_id与最小gpa的device_id对不上
分析:
首选根据上面的sql执行顺序可知:
先执行from,在执行group by 有去重和剔除null的作用(这里分组之后会出现下面这个现象,只会查出表中出现在前面的university,重复的并不会查出来),在执行select 在执行 min 最后会发现,device_id 对应不上。

2138 male 21 北京大学 3.4 7 2 12
3214 male 复旦大学 4 15 5 25
5432 male 25 山东大学 3.8 20 15 70
2315 female 23 浙江大学 3.6 5 1 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈毓辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值