Mysql条件计数

时间:2012-01-12 09:09:47

标签: 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,因为我仍然需要其他资产数据。

1 个答案:

答案 0 :(得分: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;