У меня есть таблица A:
id, pid, status
---------------
1 | x | 3
2 | x | 2
3 | y | 0
4 | y | 1
5 | z | 3
6 | y | 1
7 | x | 2
8 | z | 3
Мне нужно сгруппировать по pid
подсчитать, сколько из последних 5 строк (упорядоченных по id) имеют статус 3.
Итак, что я пытаюсь получить:
pid, is_3
---------
x | 1
y | 0
z | 2
Я пытаюсь достичь этого с помощью запроса:
SELECT pid,
COUNT(CASE WHEN status=3 THEN 1 END) AS is_3
FROM A
GROUP BY pid
ORDER BY id desc
LIMIT 5;
Обратите внимание, что я пытаюсь получить последние 5 строк для данного pid
, упорядочив по id, потому что здесь id - это последовательность.
Но я получаю сообщение об ошибке ERROR: column "A.id" must appear in the GROUP BY clause or be used in an aggregate function
. Очевидно, я ужасен в SQL. Любые мысли о том, как наилучшим образом достичь этой ориентированной на производительность, если это возможно?
Спасибо