Нахождение строк с максимумом - PullRequest
0 голосов
/ 03 сентября 2010

У меня есть довольно простая таблица в 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, если это возможно.

Спасибо, Матф

1 Ответ

1 голос
/ 03 сентября 2010

Это должно сработать:

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", потому что это, конечно, также ключевое слово;двойные кавычки преобразуют имя в идентификатор с разделителями.

...