SQL 计算所有非重复总计和小计

SQL count all distinct and sub totals

您好,我有一个 table 具有以下架构

ID companyID scopeID
1 1 2
2 2 1
3 3 2
4 3 1
5 4 1
6 4 1

我希望能够计算公司总数,但也希望能够计算每个范围内有多少家公司有不同。

对于 table 的示例,结果将是这样的:

scopeID Total_disctinct_companies_of_each_scope Total_companies
1 3 4
2 2 4

这意味着每个范围都应使用不同的 companyID 进行计数,但同时我希望能够计算独立于范围的公司总数。

我一直在尝试使用 over() 和分区依据,但由于我没有那么多经验,所以我真的不知道该怎么做。

我正在使用 MariaDB。

非常感谢!!

您可以单独计算您的不同公司总数,然后将其加入一个查询,该查询returns 每个范围的总数。

select 
    scopeID,
    count(distinct companyID) total_distinct_companies_of_each_scope,
    total.total_companies
from 
    tmp
join 
    (select count(distinct companyID) total_companies from tmp) total
group by scopeID

Returns

scopeID total_distinct_companies_of_each_scope total_companies
1 3 4
2 2 4