Ответ 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.
У меня есть таблица, которая выглядит примерно так:
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;
Но я как бы проиграл здесь. Любые указатели на то, как достичь этого без огромного заявления?
В MySQL вы можете использовать SUM(condition)
:
SELECT id, SUM(value=0) AS n0, SUM(value=1) AS n1, COUNT(*) AS total
FROM mytable
GROUP BY id
Посмотрите на sqlfiddle.
Как отметил выше @Zane, типичный способ заключается в использовании CASE-выражений для выполнения стержня.
В SQL Server теперь есть оператор PIVOT, который вы можете увидеть. DECODE() и IIF() были более старыми подходами к Oracle и Access, которые вы все еще можете найти.