【发布时间】:2021-11-12 08:51:54
【问题描述】:
如果我有这样的表:
| Name | Subject | Score |
|---|---|---|
| Tom | Math | 90 |
| Tom | Physics | 70 |
| Jerry | Math | 70 |
| Jerry | Physics | 90 |
| Bob | Math | 80 |
| Bob | Physics | 80 |
如何编写 SQL 代码来找出数学胜于物理的名字?
输出应该是:
| Name |
|---|
| Tom |
【问题讨论】:
-
你应该。编辑您的问题并展示您的尝试。
如果我有这样的表:
| Name | Subject | Score |
|---|---|---|
| Tom | Math | 90 |
| Tom | Physics | 70 |
| Jerry | Math | 70 |
| Jerry | Physics | 90 |
| Bob | Math | 80 |
| Bob | Physics | 80 |
如何编写 SQL 代码来找出数学胜于物理的名字?
输出应该是:
| Name |
|---|
| Tom |
【问题讨论】:
您可以在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
【讨论】:
很多方法。一种方法是说你想知道哪些名字有数学,哪些人的物理科目分数较低,所以
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
)
【讨论】:
我会在表格上加入两个查询,一个是数学,一个是物理:
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
【讨论】: