mysql - 从 3 个不同的主题中为一个 id 找到 max(marks),对于第二个 id 类似,依此类推
问题描述
从 3 个不同的主题中为一个 id 找到 max(marks),对于第二个 id 类似,依此类推。
表名 - 学生
+---------+---------+-------+
| stud_id | Subj | Marks |
+---------+---------+-------+
| 1 | ENGLISH | 60 |
+---------+---------+-------+
| 1 | MATHS | 50 |
+---------+---------+-------+
| 1 | HINDI | 65 |
+---------+---------+-------+
| 2 | ENGLISH | 70 |
+---------+---------+-------+
| 2 | MATHS | 20 |
+---------+---------+-------+
| 2 | HINDI | 57 |
+---------+---------+-------+
| 3 | ENGLISH | 72 |
+---------+---------+-------+
| 3 | MATHS | 88 |
+---------+---------+-------+
| 3 | HINDI | 62 |
+---------+---------+-------+
结果应该是:
+---------+---------+-------+
| stud_id | Subj | Marks |
+---------+---------+-------+
| 1 | HINDI | 65 |
+---------+---------+-------+
| 2 | ENGLISH | 70 |
+---------+---------+-------+
| 3 | MATHS | 88 |
+---------+---------+-------+
询问:
SELECT STUD_ID, SUBJ, MAX(MARKS) marks FROM STUDENT group by id;
解决方案
在平等的情况下,我采用两个 ID。
如果不是这种情况,请删除GROUP BY
并替换GROUP_CONCAT()
为DISTINCT s1.Subj
SELECT GROUP_CONCAT(DISTINCT s1.stud_id
ORDER BY s1.stud_id ASC SEPARATOR ', '),
s1.Subj,
s1.Marks
FROM Student s1
LEFT JOIN Student s2 ON s1.Marks < s2.Marks
AND s1.Subj = s2.Subj
WHERE s2.stud_id IS NULL
GROUP BY s1.Subj
你可以在这里测试
实际具有LEFT JOIN
最大值的行将NULL
位于右侧。然后,我过滤连接结果,仅显示右侧为 NULL 的行。
推荐阅读
- jenkins - 在从节点而不是主节点上运行 jenkins post build step
- sql - 在 Postgres 中将列数据从父表移动到子表
- postgresql - TypeORM:订阅两个模型
- node.js - Duplicate null key value error MongoDB with Mongoose
- azure - Azure 更新管理
- android - Android 在函数中获取上下文
- android-studio - 为什么我在 Android Studio 上看不到学习选项?
- angular - 我如何以 Angular-formly 格式化一个值
- r - 如何将 CSV excel 文件导入 R 以使输出看起来像 excel 表?
- excel-formula - Excel中的数据验证问题