如何在MariaDB中查询每个学生最高学费对应的单条记录
方案1:MariaDB 10.2及以上版本(推荐,窗口函数实现)
这种写法可读性和执行效率更高,通过窗口函数按学生分组后取学费最高的行:
SELECT Name, SchoolFees FROM ( SELECT Name, SchoolFees, -- 按学生姓名分组,组内按学费降序排序,排名第一的就是最高学费记录 ROW_NUMBER() OVER (PARTITION BY Name ORDER BY SchoolFees DESC) AS rank_num FROM Student ) AS temp WHERE rank_num = 1;
如果需要保留同个学生多条相同最高学费的记录,把ROW_NUMBER()替换为RANK()即可。
方案2:兼容所有MariaDB版本的通用写法
针对不支持窗口函数的低版本MariaDB,可以通过子查询先取每个学生的最高学费,再关联原表匹配记录:
SELECT s.Name, s.SchoolFees FROM Student s INNER JOIN ( -- 先聚合得到每个学生的最高学费 SELECT Name, MAX(SchoolFees) AS max_fee FROM Student GROUP BY Name ) AS t ON s.Name = t.Name AND s.SchoolFees = t.max_fee;
如果需要去重同个学生的多条相同最高学费记录,可以在SELECT后加DISTINCT关键字。
以上两种写法针对你提供的示例数据,都会返回预期的James/$23、Paul/$36、Tim/$13结果。
内容的提问来源于stack exchange,提问作者user2519193
相关产品推荐
相关产品推荐

