列的组合,而不是排列

时间:2011-04-15 06:14:49

标签: sql group-by combinations permutation two-columns

在我一直在研究用户的网站上,允许用户将数据提交到表格中,当他们提交数据时,会要求他们提供合作伙伴名称,因为有两个人在处理数据。我正在尝试创建一个高分表,列出顶级合作伙伴,AKA合作伙伴和提交者的组合(不是排列),最常出现在桌面上。

GROUP命令对此非常有用,但我遇到了组合/置换问题。目前,当我对它们进行分组时,它只会检查提交者和合作伙伴的排列,而不是组合。问题在于,合伙企业通常选择在作为提交者的一个人和另一个人作为合作伙伴之间进行交替,因此我实际上有两种可能的GROUP排列,我可以提取。

目前我的代码将提取一个提交者和合作伙伴排列的高分表,以及另一个合作伙伴和提交者排列的高分表。当partner = submitter或submitter = partner时,我需要加入这些结果(可能是未分组的和非有序的),然后将它们分组,然后按降序排序。

SELECT submitter, partner, COUNT(*) FROM submissions GROUP BY submitter, partner;

上面的代码将返回表格,其中包含提交者和合作伙伴的特定排列的计数,但如果相同的两个人是合作伙伴和提交者,则只需切换,他们就不会被视为同一组。

有人知道这个代码吗?

1 个答案:

答案 0 :(得分:6)

不是最漂亮的解决方案,但它确实为您提供了所需的答案:

SELECT Person1, Person2, COUNT(*) FROM (
    SELECT 
        CASE WHEN submitter < partner THEN submitter ELSE partner END AS Person1,
        CASE WHEN submitter >= partner THEN submitter ELSE partner END AS Person2
    FROM submissions
) Q
GROUP BY Person1, Person2