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

时间:2012-10-24 22:22:09

标签: 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。

2 个答案:

答案 0 :(得分:2)

我原来的回答是:

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本身,可能会更好。

答案 1 :(得分:1)

从我的理解,问题不是查询本身,而是“麻烦”的写表tab1。 我会建议你create view tab1,然后使用它。