sql - SQL 根据其他两列选择值
问题描述
如果我有一张这样的桌子:
姓名 | 主题 | 分数 |
---|---|---|
汤姆 | 数学 | 90 |
汤姆 | 物理 | 70 |
杰瑞 | 数学 | 70 |
杰瑞 | 物理 | 90 |
鲍勃 | 数学 | 80 |
鲍勃 | 物理 | 80 |
如何编写 SQL 代码来找到数学而不是物理做得更好的名字?
输出应该是:
姓名 |
---|
汤姆 |
解决方案
我会在表上加入两个查询,一个用于数学,一个用于物理:
SELECT m.name
FROM (SELECT name, score
FROM mytable
WHERE subject = 'Math') m
JOIN (SELECT name, score
FROM mytable
WHERE subject = 'Physics') p ON m.name = p.name AND m.score > p.score