我仍然对 sql server 感到困惑,例如我有学生表,我试图找到 java 学生的最高分
STUDENT
| id | name | mark | subject |
| 1 | jenny | 67 | db |
| 2 | mark | 74 | java |
| 3 | nala | 90 | java |
我试着得到这样的输出
| 3 | nala | 90 |
我用sql写了这个,但是输出是空的。
SELECT id,name,mark
FROM student
WHERE subject='Java'
AND mark=
(SELECT max(mark) FROM student);
我应该如何纠正它?
最佳答案
在 SQL 中有很多方法可以得到你想要的东西。但是,您应该了解您的方法存在的问题:
SELECT id, name, mark
FROM student
WHERE subject = 'Java' AND
mark = (SELECT max(mark) FROM student);
问题是 mark
的最大值可能不适用于 'Java'
。因此,没有行可以同时通过 where
条件。
您需要在子查询中重复过滤器,或者显式:
SELECT id, name, mark
FROM student
WHERE subject = 'Java' AND
mark = (SELECT max(mark) FROM student WHERE subject = 'Java');
或者使用相关子查询:
SELECT s.id, s.name, s.mark
FROM student s
WHERE s.subject = 'Java' AND
s.mark = (SELECT max(mark) FROM student s2 WHERE s2.subject = s.subject);
请注意,最后一个查询使用了表别名。您应该学会在查询中使用这些;有时它们是必要的,它们通常使查询更易于编写、阅读和理解。
关于sql - 在sql server中查找特定数据的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667676/