首页 > 解决方案 > 如何计算联接表中的特定变量

问题描述

我有 2 张桌子。

事业部

ID unit
1  AR
2  AP
3  AT HOME
4  CSS
5  EIT
6  SUPPORT

资产项目

ID allocation_unit item_type
1  AR              Laptop
2  AP              Laptop
3  CSS             Laptop
4  EIT             Laptop
5  EIT             Laptop
6  EIT             Laptop

我希望能够将数据提取到一个表格中,在表格中我可以计算出有多少台笔记本电脑拥有所有业务部门

这是我想展示的结果

Unit     Laptop
AR       1
AP       1
AT HOME  0
CSS      1
EIT      3
SUPPORT  0

标签: mysql

解决方案


你可以做一个LEFT JOINbusiness_unit表到asset_item相应的。business_unittable 应该是最左边的表,因为您要考虑所有unit,即使asset_item.

然后我们可以对函数GROUP BY使用条件聚合:COUNT()

SELECT
  bu.unit, 
  COUNT(CASE WHEN ai.item_type = 'Laptop' THEN 1 END) AS Laptop
FROM business_unit bu 
LEFT JOIN asset_item ai 
  ON ai.allocation_unit = bu.unit 
GROUP BY bu.unit

如果您只关心Laptop计数值,那么我们可以将条件放在LEFT JOIN自身上并取消CASE..WHEN表达式。

SELECT
  bu.unit, 
  COUNT(ai.item_type) AS Laptop
FROM business_unit bu 
LEFT JOIN asset_item ai 
  ON ai.allocation_unit = bu.unit AND 
     ai.item_type = 'Laptop' 
GROUP BY bu.unit

推荐阅读