sql - 计算具有特定值的记录数并映射到不同的表
问题描述
我有 3 张桌子
- 母公司
- 公司
- 主要的
parent_company 包含以下相关列:
parent_company_id total_num active_num
company 包含以下相关列:
company_id parent_company_id
注意:许多 company_id 可以指向同一个 parent_company_id
main 包含以下相关列:
company_id current_status
total_num 是指存在于主表中的 company_id(指向同一个 parent_company_id)的总数。active_num 是相同的,考虑到额外的条件,它们的状态必须是“活动”。
我最初在 python 中使用 pandas 执行此操作,但现在更愿意在 SQL 中执行此操作,因为我正在尝试完全删除 python。
鉴于以下公司和主表
公司:
company_id parent_company_id
468 1
785 1
781 1
213 2
896 3
主要的:
company_id current_status
781 Inactive
468 Active
785 Active
468 Inactive
781 Active
785 Active
213 Inactive
896 Active
我希望 parent_company 表如下所示:
母公司:
parent_company_id total_num active_num
1 6 4
2 1 0
3 1 1
提前感谢您的帮助!
解决方案
这应该这样做:
UPDATE p
SET p.total_num=n.total_num,
p.active_num=n.active_num
FROM parent_company p
INNER JOIN (
SELECT c.parent_company_id,
COUNT(*) AS total_num,
SUM(CASE WHEN m.status='Active' THEN 1 ELSE 0 END) AS active_num
FROM company c
INNER JOIN main m
ON c.company_id=m.company_id
GROUP BY c.parent_company_id) n
ON n.parent_company_id=p.parent_company_id;
推荐阅读
- android - Microsoft Teams - 如何从 Android Intent 启动 MS Teams
- c++ - 如何将 cmake 与 boost asio 一起使用?
- javascript - 单击按钮时从 React.js 函数返回图像
- typescript - 我可以从数组中提取类型吗?
- r - 按 data.table 中的组将值拖动到前导 NA 单元格(滚动 NA 替换)
- javascript - 如何检测 webkitSpeechRecognition 是否真的在浏览器中工作
- javascript - React 传单地图获得经纬度角
- bash - 在bash中循环几个文件扩展名
- apache-kafka - Confluent Rest Proxy 中的幂等保证
- python - < SyntaxError: 无效的语法