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
如果我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