2013-02-14 77 views
1

我需要計算幾個類別在列中出現的次數。他們被認爲是體育,醫學等字符串,欄目名稱是ct.category_name。mysql計數出現的字符串

這是我正在適應的查詢。我想爲每個類別類型添加一列。

select co.order_id, co.catalog_item_id, ct.category_name    
from customer_order as co 
join item_category as ic on (ic.item_id = co.customer_id) 
join category_translations as ct on (ct.category_id = ic.category_id) 
where co.paid = 1 and co.customer_id = 22500 and ct.locale = "en" 

當我把這個在它計算的一切select語句,我明白爲什麼,但我不知道該往哪個方向走。

count(CASE 
    WHEN ct.category_name = "sports" THEN ct.category_name 
    ELSE 0 
    end) AS 'sports' 

再次,我希望每個字符串的計數是它自己的列。任何幫助將非常感激。

當我嘗試:

select co.order_id, co.catalog_item_id, ct.category_name 
, SUM(ct.category_name = "sports") AS `sports` 
, SUM(ct.category_name = "medici") AS `medicine` 


from customer_order as co 

join item_category as ic on (ic.item_id = co.customer_id) 
join category_translations as ct on (ct.category_id = ic.category_id) 


where co.paid = 1 and co.customer_id = 22500 and ct.locale = "en" 

它計算運動兩次。錯誤的地方爲什麼?結果:

`23115 271708 sports 483 483` 

回答

1

它計算一切,因爲COUNT增加它的價值對每個不爲空值,0NULL

可能的解決方案:

  • 更換0NULL
  • 使用SUM,而不是COUNT

    SUM(CASE 
    WHEN ct.category_name = "sports" THEN 1 
    ELSE 0 
    end) AS 'sports' 
    

甚至

SUM(ct.category_name = "sports") AS `sports` 
+0

Coo,但是當我適應第二個字符串時,它只計算第一個字符串,然後重複它。如果這不是在選擇? – jahrichie 2013-02-14 02:00:00

+0

@jahrichie:我不確定我瞭解你。顯示你的確切代碼,猜測不是解決編程問題的最佳方法 – zerkms 2013-02-14 02:26:17

+0

我用我的嘗試和結果更新了第一篇文章。在此先感謝 – jahrichie 2013-02-14 02:39:00