我在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
答案 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”周围使用双引号,因为它当然也是一个关键字;双引号将名称转换为分隔标识符。