gpt4 book ai didi

sql - 在 sql 查询中对总和进行分组以聚合行

转载 作者:行者123 更新时间:2023-12-01 12:50:46 25 4
gpt4 key购买 nike

我在使用 SQL 查询时遇到问题。我有几个链接在一起的表,我正在尝试对返回进行分组/聚合,以便它们有意义(我在 SQL 中分组很糟糕)

这是我的测试数据表结构:

InsuranceCompanies(InsuranceCompanyID、公司名称)

1  InsuranceCompany1
2 InsuranceCompany2

InsurancePlans(InsurancePlanID、PlanName)

1  InsurancePlan1
2 InsurancePlan2

Practices(PracticeID,PracticeName)

1   Practice1

PracticesToInsuranceCompanies(PracticeID、InsuranceCompanyID)

1   1
1 2

PracticesToInsurancePlans(PracticeID、InsurancePlanID、SubCount)

1   1   5
1 2 10

这是我当前的查询:

select 
p.Name,
COUNT(ptc.InsuranceCompanyID) as NumberInsuranceCompanies,
isnull(ptp.SubCount), 0) as SubCount
from
Practices p
left outer join
PracticesToInsuranceCompanies ptc on ptc.PracticeID = p.PracticeID
left outer join
PracticesToInsurancePlans ptp on ptp.PracticeID = p.PracticeID
group by
p.Name, ptp.SubCount
order by
p.Name asc

这是当前的结果集:

RESULTS (PracticeName, NumberInsuranceCompanies, SubCount)
Practice1 2 10
Practice1 2 5

在上面的例子中,预期的结果是只有一行,因为只返回了一个练习。该实践有两个与之关联的计划,一个子计数为 10,一个子计数为 5,我只需要将该行聚合为一行,并将子计数作为总和添加。保险公司的数量就是与之相关联的保险公司的数量。

INTENDED RESULTS
Practice1 2 15

最佳答案

您希望在每个实践中看到两件事:保险公司的数量(如果有)和子计数(如果有)的数量。

问题是,一旦您将其他两个表都连接到练习表,您的记录就会成倍增加(例如,1 次练习有 2 ptc 和 3 ptp 使 6 条记录)。

获得所需内容的最简单方法是根本不加入,而是在 select 子句中使用子查询:

select 
Name,
(
select count(*)
from PracticesToInsuranceCompanies ptc
where ptc.PracticeID = p.PracticeID
) as NumberInsuranceCompanies,
(
select isnull(sum(SubCount), 0)
from PracticesToInsurancePlans ptp
where ptp.PracticeID = p.PracticeID
) as SubCount
from Practices p;

关于sql - 在 sql 查询中对总和进行分组以聚合行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32765981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com