PostgreSQL получает наибольшее значение с определенным условием - PullRequest
0 голосов
/ 29 января 2019

Пример таблицы базы данных с именем test

enter image description here

Я пытаюсь получить строку с «наивысшим приоритетом» в пределах«последняя и та же высота»

Вот что я пробовал до сих пор

Сначала я попытался получить «самый высокий приоритет в таблице», и я успешно получил результат, используя запрос ниже

SELECT * FROM test WHERE priority = (SELECT MAX(priority) FROM test)

Теперь я думал, что этот запрос будет работать, но при этом выдается сообщение об ошибке.

SELECT * 
FROM test 
WHERE priority = (SELECT MAX(priority) FROM test ORDER BY height DESC) 

ОШИБКА: столбец "t2.height" должен появиться в GROUP BYили использовать в статистической функции

Кто-нибудь может подсказать мне, как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете попробовать: -

SELECT id, height, max(priority)
from test
group by height
0 голосов
/ 29 января 2019

Если я правильно понимаю, вы бы использовали distinct on в Postgres:

select distinct on (height) t.*
from t
order by height, priority desc;
0 голосов
/ 29 января 2019

Вы можете попробовать ниже - используя коррелированный подзапрос

select * from test a where exists 
 (select 1 from test b  
   where a.height=b.height group by b.height having max(b.priority)=a.priority)
order by height desc
...