2016-03-12 5 views
0

Я подсчета количества голосов, отданных на элемент, и есть только два возможных значения:COUNT при использовании GROUP BY

vote = 1 и vote = 2.

SELECT COUNT(*) AS count 
FROM match_votes 
WHERE match_id = :match_id 
GROUP BY vote 

Однако, если не было ни одного голоса за 1 но голосов за 2 тогда он будет возвращать только 1 строку, поскольку она не учитывает нулевых значений. Я хочу вернуть кол-во vote = 1 и vote = 2, даже если у него нет голосов.

Кроме того, я хочу, чтобы подсчет для vote = 1 всегда был первой строкой.

ответ

3

Вам нужен left join:

select v.vote, count(mv.vote) 
from (select 1 as vote union all select 2) v left join 
    match_votes mv 
    on mv.vote = v.vote 
group by v.vote; 

Или, результаты в двух столбцах:

select sum(mv.vote = 1) as vote_1, sum(mv.vote = 2) as vote_2 
from match_votes mv; 
+0

первый запрос еще не сосчитать аннулирует я думаю, но второй один работал – frosty