sql - 如何选择某一列上具有最大值的行

标签 sql database sqlite aggregate-functions

比如我有

tab1:
att1|att2
A|3
B|4
C|3
D|4
E|1
F|2

我想要

B|4
D|4

我知道我可以用

SELECT att1 att2
FROM tab1 as T
WHERE T.att2 =
(
   SELECT MAX(att2) FROM tab1;
}

我想知道是否有更聪明的方法来做到这一点。 B/c如果需要复杂的查询才能得到tab1,写两遍很麻烦。 顺便说一下,我正在使用 Sqlite。

最佳答案

我原来的回答是:

SELECT att1, att2
FROM tab1
ORDER BY att2 DESC LIMIT 0,1;

抱歉,如果有多个记录具有最大值,那将不起作用。这是另一个答案:

SELECT t1.att1, t1.att2
FROM tab1 AS t1
LEFT JOIN tab1 AS t2
ON t1.att2 < t2.att2
WHERE t2.att1 IS NULL;

这种形式是否比作者提到的嵌套 SELECT 更有效是值得怀疑的,但如果 tab1 是一个 select 本身可能会更好。

关于sql - 如何选择某一列上具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058721/

相关文章:

mysql - 需要设计数据库方面的帮助

sql - 从表中的列中删除字符串的某些部分

sql - 根据第 7 个分隔符拆分 sql 字符串值

android sqlite - 相同的值 - 不同的语言

sqlite - SQLite 中嵌套内连接的问题

mysql - 复杂的 Sql 连接查询问题

java - 如何使用关于 mysql 驱动程序的 CLASSPATH? "Could not find driver with class name: com.mysql.jdbc.Driver"

php - MySQL 分组依据或排序依据

php - 如何使用 mysqli 库循环删除多个 mysql 数据库?

java - 可扩展 ListView 的烦人 SQLite 查询问题