[英]MYSQL: count column if something if another column is equal to something else
我有下表:
----------------------------------------------
|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”
順便說一下,我正在使用帶有MYSQL數據庫的PDO。
謝謝
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;
如果你已經展示了你的預期產量,那就太好了。 以下示例很簡單。 所以,讓我們知道你真正需要的是什么。 很樂意投入。:)
參考: SQLFIDDLE
碼:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.