如何基于通用成员资格进行SQL分组

时间:2016-01-29 22:11:47

标签: sql sqlite group-by

我有一张如下表格,只是说一个人与同一团队中的其他人(包括你自己)匹配:

person1|person2
-------------
A      | A
B      | A
C      | A
A      | B
B      | B
C      | B
A      | C
B      | C
C      | C
X      | X
Y      | X
X      | Y
Y      | Y

我想使用GROUP_CONCAT获得两条记录并具有以下内容

team
-------
A, B, C
X, Y

GROUP_CONCAT的顺序并不太重要,但我不希望像“A,B,C”,“B,A,C”那样重复。或者更好的是,与会员一起解决任何类型的队友:

teamid|person
-------------
1     | A
1     | B
1     | C
2     | X
2     | Y

2 个答案:

答案 0 :(得分:1)

根据您的数据,您可以通过执行以下操作来处理:

select distinct group_concat(person2 order by person2)
from t
group by person1;

作为备注:您可以交换person2person1并获得相同的结果。

答案 1 :(得分:1)

使用group_concat()生成团队成员列表。 为确保group_concat()仅为每个可能的团队成员集创建一个唯一结果,请先对数据进行排序:

SELECT DISTINCT group_concat(person2)
FROM (SELECT person1, person2
      FROM MyTable
      ORDER BY person1, person2)
GROUP BY person1;