题目描述

运营团队希望找到每个学校 GPA 最低的同学来做调研。请从 user_profile 表中取出每个学校最低的 GPA 及对应的 device_id。输出结果需按照 university 升序排序。

解题思路

  1. 找到每个学校 GPA 最低的同学,并获取其 device_iduniversitygpa。结果按 university 升序排序
  2. 通过 JOIN 操作用 device_id 关联主表,筛选出 GPA 为最低值的记录。 3.如果某个学校有多个同学 GPA 相同且均为最低值,则将所有符合条件的同学都列出。
  3. 按照 university 名称进行升序排序,以满足输出要求。

SQL 查询


SELECT 
    up.device_id, 
    up.university, 
    up.gpa
FROM 
    user_profile up
JOIN 
    (SELECT 
         university, 
         MIN(gpa) AS min_gpa
     FROM 
         user_profile
     GROUP BY 
         university
    ) AS sub
ON 
    up.university = sub.university 
    AND up.gpa = sub.min_gpa
ORDER BY 
    up.university ASC;

代码解释

  • 子查询 sub

    • SELECT university, MIN(gpa) AS min_gpa FROM user_profile GROUP BY university
      • 按照 university 分组,计算每个学校的最低 GPA。
      • 结果包含每个学校的名称及其对应的最低 GPA。
  • 主查询

    • JOIN 操作将主表 user_profile 与子查询结果 sub 连接:
      • 连接条件为 university 相同且 gpa 等于该学校的最低 GPA。
      • 这样即可筛选出每个学校 GPA 最低的同学。