【问题标题】:Get count of combinations of rows having different values in different columns获取在不同列中具有不同值的行组合的计数
【发布时间】:2018-08-03 15:53:53
【问题描述】:

我想获取在不同列中具有不同值的行组合的计数。

示例数据如下:

+------+---------+---------+
| GUID | Column1 | Column2 |
+------+---------+---------+
| XXX  | A       | aaa     |
| XXX  | B       | bbb     |
| YYY  | C       | ccc     |
| YYY  | D       | ddd     |
| XXX  | A       | aaa     |
| XXX  | B       | bbb     |
+------+---------+---------+

我期待以下结果。所以 XXX 应该是 2,因为我们有 2 条记录,其中 Column1=A,Column2=aaa 和 Column1=B,Column2=bbb(两个不同列值的组合)

XXX 2

YYY 1

【问题讨论】:

  • 要求不明确:没有Column1=aaa的行
  • 我更新了文本。 Column1=A,Column2=aaa,Column1=B,Column2=bbb
  • 如果有XXX|C|ccc怎么办?预期的结果是什么?
  • XXX/C/ccc 永远不会发生。 XXX 将只有两条记录具有不同的 Column1 和 Column2 值

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

您可以按GUIDColumn2 分组,然后取count(*) 的最大值得到组合数:

declare @tmp table ([GUID] varchar(3), Column1 varchar(1), Column2 varchar(3))
insert into @tmp values ('XXX','A','aaa'),('XXX','B','bbb'),('YYY','C','ccc'),
                        ('YYY','D','ddd'),('XXX','A','aaa'),('XXX','B','bbb')

select T.[GUID], max(T.cnt) as count_combinations 
from (
    select [GUID], Column2, count(*) as cnt 
    from @tmp
    group by [GUID], Column2
) T
group by T.[GUID]

结果:

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2021-04-20
    相关资源
    最近更新 更多