2013-10-27 3 views
2
article_vote table 
+------------+------+ 
| article_id | vote | 
+------------+------+ 
|   1 | 3 | 
|   1 | 1 | 
|   1 | -1 | 
|   1 | -2 | 
+------------+------+ 

위의 표에서 두 가지 결과를 반환하려고 시도했습니다. 1. 모든 부정 투표의 결합 된 가치. 2. 모든 긍정적 인 표결의 합산 된 가치. 따라서 양수는 이어야하며 음수는 -3이어야합니다. 투표 필드에는 NULL 값이 없습니다.MySQL : 복수 SUMS 계산 값 합계 값

내가 의도 한대로이 SQL이 작동하지 않습니다

SELECT vote, 
    SUM(vote > 0) AS positive, 
    SUM(vote < 1) AS negative 
FROM article_vote 
WHERE vote_article_id = 50 
GROUP BY vote 

를 내가 반환 위의 데이터 세트에 사용할 때

Array ([vote] => -22 [positive] => 0 [negative] => 1) 

어디서 잘못된 것입니까?

답변

2

올바른 일 :

select article_id, 
    sum(case when vote >0 then vote else 0 end) as postive, 
    sum(case when vote <0 then vote else 0 end) as negative 
FROM article_vote 
GROUP BY article_id 

Uncrear 당신에 대한 조건, 죄송합니다.

+0

먼저 답을 적어 두었습니다. 고맙습니다 –

1

당신이 뭔가를 시도 할 수 :

SELECT article_id, 

    (SELECT SUM(vote) 
    FROM article_vote 
    WHERE vote > 0 
    AND article_id = 50) AS positive, 

    (SELECT SUM(vote) 
    FROM article_vote 
    WHERE vote < 0 
    AND article_id = 50) AS negative 

FROM article_vote 
WHERE article_id = 50 
GROUP BY article_id 
+0

나는'SELECT DISTINCT article_id, ... '가 좋을 것이라고 생각한다. – TrungDQ

+0

@TrungDQ'GROUP BY' 절은 중복 행을 처리합니다. 이것은 한 행만 반환해야합니다. –

+0

나는 방법으로 그것을 시도했다 : http://sqlfiddle.com/#!2/3d2af/6 – TrungDQ

2
mysql> SELECT * FROM article_vote; 
+------------+------+ 
| article_id | vote | 
+------------+------+ 
|   1 | 3 | 
|   1 | 1 | 
|   1 | -1 | 
|   1 | -2 | 
+------------+------+ 
4 rows in set (0.00 sec) 

SELECT 
    SUM(CASE WHEN vote > 0 THEN vote ELSE 0 END) AS positive, 
    SUM(CASE WHEN vote < 0 THEN vote ELSE 0 END) AS negative 
FROM article_vote 
WHERE article_id = 1; 

+----------+----------+ 
| positive | negative | 
+----------+----------+ 
|  4 |  -3 | 
+----------+----------+ 

http://sqlfiddle.com/#!2/c18e3/1

+0

나는 이것을 가장 많이 선택한다. 감사합니다. Rep up :) –

3

이 밖으로 시도 :

SELECT 
    SUM(if(vote > 0, vote, 0)) positive, 
    SUM(if(vote < 0, vote, 0)) negative 
FROM article_vote 
WHERE article_id = 1 

결과 :

| POSITIVE | NEGATIVE | 
|----------|----------| 
|  4 |  -3 | 

피들 here. 이 같은