首页 > 解决方案 > 计算具有特定值的记录数并映射到不同的表

问题描述

我有 3 张桌子

  1. 母公司
  2. 公司
  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

提前感谢您的帮助!

标签: sqlsql-server

解决方案


这应该这样做:

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;

推荐阅读