计算具有与相同 ID 相关的不同列值的结果
Posted
技术标签:
【中文标题】计算具有与相同 ID 相关的不同列值的结果【英文标题】:Count results that have different column value related to same ID 【发布时间】:2021-01-25 11:37:25 【问题描述】:我是 SQL 新手,正在寻求有关如何最好地做到这一点的帮助。
我有 2 个包含以下列的表格: 投资者:回合 ID、投资者姓名、投资者城市、投资者国家 回合:回合 ID、公司名称、公司城市、公司国家/地区
我加入他们是为了得到这个结果
Round ID | Investor Country | Company Country |
---|---|---|
1 | US | Spain |
1 | UK | Spain |
1 | Spain | Spain |
2 | France | Germany |
2 | UK | Germany |
3 | UK | Italy |
3 | Italy | Italy |
我需要获取其国家/地区与公司国家/地区不同的投资者数量(每轮 ID),因此就像第一轮一样,我将有 2 个,第 2 轮为 0,第 3 轮为 1。
我该怎么做?
感谢您的帮助!
【问题讨论】:
您是否考虑过使用COUNT
和CASE
表达式?你试过什么?
【参考方案1】:
只使用条件聚合:
select round,
sum(case when investor_country <> company_company then 1 else 0 end) as cnt
from t
group by round;
【讨论】:
【参考方案2】:查看您的预期输出,我认为您需要count = 0
,以防investor country = company country
不存在单个记录,如果存在,那么您需要所有其他记录计数。
你可以使用如下条件:
select round_id,
case when count(case when investor_country = company_company then 1 end) = 0
then 0
else count(case when investor_country <> company_company then 1 end)
end as cnt
from your_table t
group by round_id;
【讨论】:
【参考方案3】:如果您需要不同的计数:
SELECT
RoundId,
SUM(IIF(InvestorCountry != CompanyCountry,1,0)) AS Count
FROM
YOUR_TABLE_OR_VIEW
GROUP BY
RoundId
如果您需要不同的计数,并且当同一回合的所有结果都不同时,您希望为零:
SELECT
t.RoundId,
IIF(t.Count = t.DiffrentCount,0,t.DiffrentCount) 'Count'
FROM
(
SELECT
RoundId,
SUM(1) AS 'Count',
SUM(IIF(InvestorCountry != CompanyCountry,1,0)) AS 'DiffrentCount',
FROM
YOUR_TABLE_OR_VIEW
GROUP BY
RoundId
)t
【讨论】:
以上是关于计算具有与相同 ID 相关的不同列值的结果的主要内容,如果未能解决你的问题,请参考以下文章