查找具有最大值的行

时间:2010-09-03 01:07:46

标签: sql sqlite greatest-n-per-group

我在SQLite中有一个非常简单的表,具有以下模式:

CREATE TABLE IF NOT EXISTS Palettes 
             (id INTEGER PRIMARY KEY AUTOINCREMENT, 
             class TEXT, count INTEGER, name TEXT);

这些代表调色板,并且几个调色板可以具有相同的名称,但具有不同的计数(即大小)。

我想要做的是为每组命名的调色板找到具有最大(或最少)数量的调色板。

我的第一个想法是从:

开始
SELECT * FROM Palettes GROUP BY name;

但是,当然,我得到的那一行是任意的。进一步看,似乎即使我这样做了:

SELECT MAX("count"), * FROM Palettes GROUP BY name;

我仍然得到任意一行。 最后一枪:

SELECT * FROM (SELECT * FROM Palettes ORDER BY "count") GROUP BY name;

似乎可以工作,但我无法在任何地方找到任何保证。

有人有解决此问题的方法吗?当然,我可以在代码中解决它,但如果可能的话,我更喜欢SQL解决方案。

谢谢, -matt

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

SELECT P.*
  FROM Palettes AS P JOIN
       (SELECT name, MAX("count") AS max_count
          FROM Palette
         GROUP BY Name) AS MC
       ON MC.Name = P.Name AND P."count" = MC.Max_Count;

如果有多个行具有特定名称的最大计数,则会返回多行。

我在“count”周围使用双引号,因为它当然也是一个关键字;双引号将名称转换为分隔标识符。