Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql条件计数_Mysql - Fatal编程技术网

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:我在您的评论之后更改了它。这就是我要找的。谢谢