2012-01-12 106 views
0

我有這樣的資產表:
Mysql的條件計數

asset_id  | mediumint(8) 
asset_type_id | mediumint(8) 
asset_name | varchar(200) 

和查找表:

product_id | mediumint(8) 
asset_id | mediumint(8) 
sequence | smallint(3) 

基本上,該查找表可以具有用於一個資產的多個條目項目。您可以在資產表中獲取項目描述。

資產根據其asset_type_id分類爲圖像,視頻,聲音等。此asset_type_id由整數1到16組成。

現在,我只想計算特定項目的圖像數量(1),視頻(2)和聲音(3)。無論如何,我可以使用一個SELECT QUERY來做到這一點嗎?

我無法將我的選擇限制爲asset_type_id = 1或2或3,因爲我仍然需要其他資產數據。

+0

肯定。你想如何輸出? – gbn 2012-01-12 09:11:00

+0

我想要它像product_id | asset_count_image | asset_count_video | asset_count_sound – 2012-01-12 09:12:04

回答

5
SELECT 
    l.product_id, t.asset_type_id, COUNT(*) 
FROM 
    lookup l 
    CROSS JOIN 
    (SELECT 1 AS asset_type_id UNION ALL SELECT 2 UNION ALL SELECT 3) t 
    LEFT JOIN 
    assets a ON l.asset_id = a.asset_id AND t.asset_type_id = a.asset_type_id 
GROUP BY 
    l.product_id, t.asset_type_id; 

編輯:作爲單獨的列

SELECT 
    l.product_id, 
    COUNT(CASE WHEN a.asset_type_id = 1 THEN 1 END) AS asset_count_image, 
    COUNT(CASE WHEN a.asset_type_id = 2 THEN 1 END) AS asset_count_video, 
    COUNT(CASE WHEN a.asset_type_id = 3 THEN 1 END) AS asset_count_sound 
FROM 
    lookup l 
    LEFT JOIN 
    assets a1 ON l.asset_id = a.asset_id AND a.asset_type_id IN (1, 2, 3) 
GROUP BY 
    l.product_id; 
+0

HI gbn,對不起,我忘了包括。我無法按資產ID使用組,因爲結果應按product_id進行分組。 – 2012-01-12 09:18:05

+0

@ Jan-DeanFajardo:在你的評論 – gbn 2012-01-12 09:22:49

+0

哇之後,我改變了這一點。這就是我要找的。謝謝! – 2012-01-12 09:28:26