簡體   English   中英

MYSQL:如果另一列等於其他內容,則為count列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM