我有这个资产表:
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 :(得分: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;