基于一张引用表JOIN多张表并统计记录

Posted

技术标签:

【中文标题】基于一张引用表JOIN多张表并统计记录【英文标题】:JOIN multiple tables based on one reference table and count records 【发布时间】:2020-10-01 02:18:30 【问题描述】:

我有以下表格:

汽车:

id   manufacturer
--------------------        
1     Nissan
2     Toyota 
3     Honda
4     Volkswagen

类型:

id       type                    car_id
--------------------------------------------
1        maxima                   1
2        civic                    3
3        accord                   3
4        corolla                  2
5        altima                   1

颜色:

id      color          car_id
———————————--------------------
1       yellow          1
2       blue            2
3       blue            1
4       black           4
5       red             1

想要的表:

car_id       total_type       total_colors
————————————————---------------------------
1                2                     3               
2                1                     1
3                2                     0
4                0                     1

我怎样才能得到结果表?我宁愿不使用 with 子句。 CROSS JOIN 会是最佳方式吗?

【问题讨论】:

【参考方案1】:

似乎可以使用 2 个 LEFT JOIN 和 COUNT DISTINCT 聚合函数来完成。像这样的

select c.id, count(distinct t.id) total_type, count(distinct co.id) total_colors, 
from cars c
     left join [types] t on c.id=t.car_id
     left join colors co on c.id=co.car_id
group by c.id
order by 1;

【讨论】:

以上是关于基于一张引用表JOIN多张表并统计记录的主要内容,如果未能解决你的问题,请参考以下文章

统计多张表的数据总量

Hadoop Join

mysql left join 左连接查询关联n多张表

mysql left join 左连接查询关联n多张表

MySQL 分区表

mysql有多张表如何快速复制表并把数据挪过去?