sql - 在sql server中查找特定数据的最大值

标签 sql sql-server database select sql-order-by

我仍然对 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/

相关文章:

mysql - 如何正确地将 "point"字段的值设置到MySql数据库表中?

sql - 如何在Oracle中获得字符串的最右边10个位置

java - MyBatis 与 MS SQL 未映射到 LocalDateTime

c# - Entity Framework 中的数据库错误处理

php - time_stamp数据类型在插入时在mysql数据库中打印全零

sql - 如何只选择一个表中包含另一个表中所有值的记录?

mysql - 在简单的关联表上使用mysql中的关系除法

c# - Entity Framework : multiple from is generating cross join

database - Elasticsearch ,多个索引与一个索引和不同数据集的类型?

sql - 非经理员工名单