2016-11-18 1 views
0

Я пытаюсь получить сумму двух столбцов в PSQLПочему моя сумма для двух столбцов в psql неверна?

select id as id, name as name, count(winner_id) as winner_count, 
(count(winner_id) +count(loser_id)) as total_matches from player left join 
matches on matches.winner_id = player.id group by winner_id, player.name,player.id, 
matches.loser_id;") 

подсчитывать Итоговые матчи должны быть полностью или winner_id и loser_id в таблице спичек.

Но это неверно.

Он должен вернуть 1 матч для всех игроков, но вместо этого он возвращает 2 матча для игроков, которые выиграли и 0 матчей для проигравших игроков.

+0

Редактировать свой вопрос и предоставить образцы данных и желаемые результаты. –

ответ

1

count() подсчитывает количество раз, что значение не равно NULL. Таким образом, два count() s, вероятно, вернут одинаковое значение. Я подозреваю, что вы хотите что-то вроде этого:

select id, name, 
     sum(case when id = winner_id then 1 else 0 end) as winner_count, 
     count(m.id) as total_matches 
from player p left join 
    matches m 
    on m.winner_id = p.id 
group by p.name, p.id; 
+0

Спасибо! Это ближе к тому, что я искал. Если игроки только введены, но еще не имеют соответствия, то он должен вернуть 0 для подсчета, но я попытаюсь изменить это самостоятельно. Когда есть совпадения, хотя это работает, так что это приблизило меня. Благодаря! – John

+0

@John. , , Я проблема 'total_matches', которая просто требует исправления того, что подсчитывается. –