#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
значения, имеющего наибольшее количество голосов.