SQL select 值基于其他两列

SQL select values based on other two columns

如果我table喜欢:

Name Subject Score
Tom Math 90
Tom Physics 70
Jerry Math 70
Jerry Physics 90
Bob Math 80
Bob Physics 80

如何编写 SQL 代码来查找数学比物理更好的人?

输出应该是:

Name
Tom

我将在 table 上加入两个查询,一个用于数学,一个用于物理:

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

多种方式。一种方法是说您想知道哪些名字有数学,哪些人也有分数较低的学科物理,所以

select *
from t
where subject='maths' and exists (
  select * from t t2 where t2.name=t.name 
    and t2.subject='physics'
    and t2.score < t.score
)

你可以在db-fiddle中用数据查看我的解决方案。

总之,您可以申请以下查询

SELECT 
      s1.Name
      FROM TableName s1, TableName s2
WHERE s1.Name = s2.Name 
AND s1.Subject = 'Math' AND s2.Subject = 'Physics' 
AND s1.Score > s2.Score