【问题标题】:How to select rows with max values on a certain column如何在某一列上选择具有最大值的行
【发布时间】:2012-10-24 22:22:08
【问题描述】:

例如,我有

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。

【问题讨论】:

  • 您所拥有的可能与性能和清洁度一样好

标签: sql database sqlite aggregate-functions


【解决方案1】:

我原来的答案是:

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

【讨论】:

  • 谢谢!但是,如果有 10 个具有最大值的值,那就行不通了……
  • Alexander - LIMIT 将仅限制行数。这不是答案。
  • 非常感谢,亚历克斯!这很聪明。
【解决方案2】:

据我了解,问题不在于查询本身,而在于“繁琐”的写表tab1。 我建议你create view tab1,然后使用它。

【讨论】:

  • 谢谢!那将是我能做的最后一件事。我只是想确保没有聪明的 sql 可以一次性完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2013-04-13
  • 2021-07-23
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多