Postgres группа, имеющая как минимум 1 строку со статусом = 'запущен' - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужно выполнить группировку по и только в том числе, если хотя бы одно наблюдение соответствует ограничению. Как я пытался описать ниже.

SELECT {some variables}
FROM my_table
GROUP BY A
HAVING {at least 1 row with status='started'}

Моей первоначальной догадкой заменить было " как минимум 1 строка со статусом = 'запущен' " был " bool_or (status = 'начал') ». Что не работает.

У кого-нибудь из вас есть предложение?

РЕДАКТИРОВАТЬ:

SELECT {some variables}
FROM my_table
GROUP BY A
HAVING bool_or(status='started');

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

1 Ответ

2 голосов
/ 20 февраля 2020

having bool_or(status = 'started') - хороший вариант в Postgres, и, вероятно, ваш лучший выбор здесь.

На самом деле он эквивалентен:

having max( (status = 'started')::int ) = 1

Ради полноты: в стандартном SQL это можно выразить выражением case:

having max(case when status = 'started' then 1 end) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...