СГРУППИРУЙТЕ ПО одному столбцу, затем по другому столбцу

#postgresql

Вопрос:

введите описание изображения здесь

 SELECT lkey, max(votecount) FROM VOTES WHERE ekey = (SELECT ekey FROM Elections where electionid='NR2019') GROUP BY lkey ORDER BY lkey ASC  

Есть ли простой способ получить ключ pkey в этом заявлении?

Решение должно выглядеть так
введите описание изображения здесь

Комментарии:

1. группа по lkey, pkey?

2. @SergeyMiryanov не работает. Сгруппированы по lkey или pkey

3. Вы хотите получить pkey для максимального значения количества голосов в группе lkey? Потому что я не уверен, что понимаю, чего вы хотите достичь — группируйтесь по lkey, pkey делайте то, что вы написали в названии.

4. max(votecount) lkey только per содержит все votecount s для всех pkey s, поэтому результат group by lkey, pkey будет таким же, как таблица на первом снимке экрана, которая, как я предполагаю, является входной таблицей. @visCode было бы полезно, если бы вы отредактировали свой вопрос, чтобы лучше объяснить, чего вы хотите достичь. Ваш текущий ожидаемый результат может быть очевидным select lkey,pkey from subquery where (lkey=1 and pkey=2) or (lkey=2 and pkey=2) для всего, что мы знаем.

Ответ №1:

Воспользуйся DISTINCT ON :

 SELECT DISTINCT ON (v.ikey) v.* FROM VOTES v INNER JOIN Elections e ON e.ekey = v.ekey WHERE e.electionid = 'NR2019' ORDER BY v.ikey, v.votecount DESC;  

На простом английском языке в приведенном выше запросе говорится о возврате одной записи для каждого ikey значения, имеющего наибольшее количество голосов.