2012-11-27 48 views
3

我有如下表:MYSQL:數列,如果東西,如果另一列等於別的東西

---------------------------------------------- 
|ID|Vote_Item_ID|User_ID|Country_code| Vote| 
|01| 105102151|user1 |   CA| like| 
|02| 105102151|user2 |   CA|dislike| 
|03| 105102151|user3 |   UK|dislike| 
|04| 105102151|user4 |   UK| like| 
|05| 105102151|user5 |   UK| like| 
---------------------------------------------- 

我需要做的就是創建一個用於創建其總計好惡數組中的SQL語句對於每個國家......我正在使用這個腳本的腳本有175個國家,那麼這是否是一個低效率的方式呢?

我不知道怎麼去寫Select語句,因爲我希望腳本能重複使用許多不同的「vote_item_id」 S

我使用的PDO與方式的MySQL數據庫。

感謝

+0

我知道答案的另一個問題 - 你不知道。需要使用PHP創建JS。 – Popnoodles

回答

13
SELECT Country_Code, 
     SUM(CASE WHEN vote = 'like' THEN 1 ELSE 0 END) `like`, 
     SUM(CASE WHEN vote = 'dislike' THEN 1 ELSE 0 END) dislike 
FROM tableName 
GROUP BY Country_Code 

,或者如果你想PreparedStatement都給出了相同的結果

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'SUM(CASE WHEN vote = ''', 
     Vote, 
     ''' then 1 Else 0 end) AS `', 
     Vote, '`' 
    ) 
) INTO @sql 
FROM TableName; 

SET @sql = CONCAT('SELECT Country_Code, ', @sql, ' 
        FROM tableName 
        GROUP BY Country_Code'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

你喜歡'喜歡'但不喜歡......當它有必要嗎? –

+3

@GrijeshChauhan,因爲'LIKE'是[**保留字**](http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)。 –

+0

明白了!我是MySQL的新手......即使我有一些沒有答案的問題,並等待答案。 –

1

如果您已經顯示了您的預期產出,那就太好了。 以下示例很簡單。因此,讓我們知道除此之外你真正需要的東西。會很樂意在投球:)

參考:SQLFIDDLE

CODE:

SELECT t.country_code, 
     sum(CASE WHEN t.vote = 'like' 
       THEN 1 ELSE 0 END) AS LIKES, 
     sum(CASE WHEN t.vote = 'dislike' 
       THEN 1 ELSE 0 END) AS DISLIKE   
    FROM tbl t 
    GROUP BY t.country_code 
    ; 

結果:

COUNTRY_CODE LIKES DISLIKE 
CA    1  1 
UK    2  1 
+0

看來Kuya很快:) – bonCodigo

相關問題