2014-01-22 3 views
1

안녕하세요. 전 코드 사용 GET 카운트 값왜 쿼리가 올바른 결과를 제공하지 않습니까?

id UserIdn CommentIdn LikeIdn NewsIdn Type IsFavorite DateCreate 

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

:

테이블 데이터가 아니라

CountUp CountDown 
    1  0 

내가 얻을

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

하지만 결과하여

CountUp CountDown 
    1  1 

왜 내가 올바른 결과를 얻지 못하게 해달라고 말해 주시겠습니까? 어떻게 질의가 올바른가?

+0

사용 대신 SUM의 수, 합계 요약, 수를 계산합니다. – datelligence

답변

1

sum()에있는 사례를 사용해보세요. 당신의 COUNT() 기능에

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

ELSE 0 후에 END를 잊지 마세요. –

+0

촬영이 맞습니다. 감사. – Coderchu

+0

구문을 신경 쓰는 +1! –

1

예제의 Type='up' 중 하나 (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이 표시됩니다. 'null'대신에 0이 필요합니다. 어떻게 만드니? –

+0

내 편집 참조, coalesce() 함수는 null이 아닌 해당 매개 변수 중 첫 번째를 반환합니다. – 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이 표시됩니다. 'null'대신에 0이 필요합니다. 어떻게 만드니? –

+0

@ user3213826, 내 편집 된 코드를 확인해보십시오. :) –

+0

@ user3213826, 코드 재 편집 :) –

관련 문제