2014-01-22 5 views
1

Добрый день.Почему запрос дает неверные результаты?

Таблица имеют данные:

id UserIdn CommentIdn LikeIdn NewsIdn Type IsFavorite DateCreate 

1 527464    613895 748153 up yes 0000-00-00 00:00:00 

Для значений счетчика ПОЛУЧИТЬ я использую код:

SELECT 
count(Type='up') as CountUp, 
count(Type='down') as CountDown 
FROM Likes WHERE NewsIdn = '748153' 

, но и в результате вместо

CountUp CountDown 
    1  0 

я получить

CountUp CountDown 
    1  1 

Скажите, пожалуйста, почему я получаю неправильные результаты? Как будет выглядеть запрос?

+0

Использование COUNT вместо SUM, сумма суммирует, граф рассчитывает. – datelligence

ответ

1

Попробуйте использовать случай, когда в сумме().

SELECT SUM(CASE WHEN Type = 'up' THEN 1 ELSE 0 END) as 'count_up' 
... 
+1

Не забудьте КОНЕЦ после ELSE 0. –

+0

стрелять, вы правы. Благодарю. – Coderchu

+0

+1 для ухода за синтаксисом! –

1

Type='up', например, в вашей COUNT() функции либо ложные (0) или истинные (1). Но COUNT() не заботится об этом, он просто видит, что есть строка. Используйте SUM() вместо:

SELECT 
COALESCE(SUM(Type='up'), 0) as CountUp, 
COALESCE(SUM(Type='down'), 0) as CountDown 
FROM Likes WHERE NewsIdn = '748153' 
+0

теперь я получаю CountUp-> NULL CountDown-> NULL. но вместо этого нужно «0». как это сделать? –

+0

См. Мою функцию edit, coalesce() возвращает сначала ее параметры, которые не равны нулю. – fancyPants

0

Попробуйте это ...

SELECT 
SUM(CASE WHEN Type='up' AND Type IS NOT NULL THEN 1 ELSE 0 END) as CountUp, 
SUM(CASE WHEN Type='down' AND Type IS NOT NULL THEN 1 ELSE 0 END) as CountDown 
FROM Likes 
WHERE NewsIdn = '748153' 
+0

теперь я получаю CountUp-> NULL CountDown-> NULL. но вместо этого нужно «0». как это сделать? –

+0

@ user3213826, Проверьте мой отредактированный код, попробуйте :) –

+0

@ user3213826, я переработал код :) –

Смежные вопросы