Mysql条件计数
我有这个资产表:Mysql条件计数,mysql,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_id | mediumint(8) asset_type_id | mediumint(8) asset_name
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_id | mediumint(8)
asset_type_id | mediumint(8)
asset_name | varchar(200)
product_id | mediumint(8)
asset_id | mediumint(8)
sequence | smallint(3)
基本上,查找表可以有一个项目的多个资产条目。您可以在资产表中获取项目描述
资产根据其资产类型标识分为图像、视频、声音等。该资产类型标识由整数1到16组成
现在,我只想计算一个特定项目的图像(1)、视频(2)和声音(3)的数量。我是否可以使用一个SELECT查询来执行此操作
我不能将我的选择限制为资产类型id=1或2或3,因为我仍然需要其他资产数据
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;
编辑:作为单独的列
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;
对你想要怎样的输出?我想要产品| id |资产|计数|图像|资产|计数|视频|资产|计数|声音是的。你想要怎样的输出?我想要像产品|资产|计数|图像|资产|计数|视频|资产|计数|声音一样的输出。对不起,我忘了包括在内。我不能使用“按资产id分组”,因为结果应该按产品id分组。@Jan DeanFajardo:我在您的评论之后更改了它。这就是我要找的。谢谢嗨,gbn,对不起,我忘了包括在内。我不能使用“按资产id分组”,因为结果应该按产品id分组。@Jan DeanFajardo:我在您的评论之后更改了它。这就是我要找的。谢谢