计算具有与相同 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。

我该怎么做?

感谢您的帮助!

【问题讨论】:

您是否考虑过使用COUNTCASE 表达式?你试过什么? 【参考方案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 相关的不同列值的结果的主要内容,如果未能解决你的问题,请参考以下文章

连接具有相同值的行的列值(不同列的)

mysql连接具有相同列值的两行并计算某些列值并返回一行中的所有行

计算具有3个列值的行的出现次数相同的MySQL

使用名为查询的数据 jpa 返回具有不同列值的行

如何计算与 R 中相同列值关联的两个行值的差异?

计算具有相同 id 的列的值的存储过程