SQL - подсчет строк с определенным значением

У меня есть таблица, которая выглядит примерно так:

id  value
1   0
1   1
1   2
1   0
1   1
2   2
2   1
2   1
2   0
3   0
3   2
3   0

Теперь для каждого id я хочу подсчитать количество вхождений 0 и 1 и количество вхождений для этого идентификатора (значение может быть любым целым числом), поэтому конечный результат должен выглядеть примерно так:

id  n0  n1  total
1   2   2   5
2   1   2   4
3   2   0   3

Мне удалось получить первую и последнюю строку с этим выражением:

SELECT id, COUNT(*) FROM mytable GROUP BY id;

Но я как бы проиграл здесь. Любые указатели на то, как достичь этого без огромного заявления?

Ответы

Ответ 1

В MySQL вы можете использовать SUM(condition):

SELECT   id, SUM(value=0) AS n0, SUM(value=1) AS n1, COUNT(*) AS total
FROM     mytable
GROUP BY id

Посмотрите на sqlfiddle.

Ответ 2

Как отметил выше @Zane, типичный способ заключается в использовании CASE-выражений для выполнения стержня.

В SQL Server теперь есть оператор PIVOT, который вы можете увидеть. DECODE() и IIF() были более старыми подходами к Oracle и Access, которые вы все еще можете найти.