我正在为一个 mysql 项目规划一个数据库,我认为我需要在继续之前解决这个问题。
CREATE TABLE ResultsTbl (
EventID INTEGER,
MatchNumber INTEGER (9),
TeamNumber int,
IndividualName CHAR (100),
Result char (4)
);
INSERT INTO ResultsTbl VALUES (1,1,1,'individual 1','W');
INSERT INTO ResultsTbl VALUES (1,1,1,'individual 2','W');
INSERT INTO ResultsTbl VALUES (1,1,2,'individual 3','L');
INSERT INTO ResultsTbl VALUES (1,1,2,'individual 4','L');
INSERT INTO ResultsTbl VALUES (1,1,3,'individual 5','L');
INSERT INTO ResultsTbl VALUES (1,1,3,'individual 6','L');
INSERT INTO ResultsTbl VALUES (1,2,1,'individual 7','W');
INSERT INTO ResultsTbl VALUES (1,2,2,'individual 8','L');
INSERT INTO ResultsTbl VALUES (1,3,1,'individual 9','W');
INSERT INTO ResultsTbl VALUES (1,3,1,'individual 10','W');
INSERT INTO ResultsTbl VALUES (1,3,2,'individual 11','L');
INSERT INTO ResultsTbl VALUES (1,3,2,'individual 12','L');
所以我有一个表来保存匹配数据。我需要最终结果为每个 MatchNumber 设置一个单元格,其中 Result = 'W' 和一个结果 = 'L',但我需要同一团队的 IndividualNames 用“&”连接。我还需要用“,”连接的团队。
对于上面的例子,想要的结果需要如下:
MatchNumber | Winners | Losers
1 | Individual 1 & individual 2 | individual 3 & individual 4, individual 5 & individual 6
2 | individual 7 | individual 8
3 | individual 9 & individual 10 | individual 11 & individual 12
因此,在第 1 场比赛中,我们有 1 支球队获胜,但有 2 支球队输家。同一团队中的个人用“&”连接,不同团队用“,”连接。第 2 场比赛每队只有 1 人,因此不需要特殊角色。第 3 场比赛的获胜者和失败者均由 2 人组成,因此他们用“&”连接,不需要“,”。
我很想写下我失败的地方,但我无法接近我需要做的事情。我查看了团队中的 group_concat 路径,然后是结果中的 group_concat,但我无法弄清楚。
我想在处理所有数据之前先处理好这个问题,因此如果需要更改表结构才能完成此任务,那么我愿意听取建议。
感谢任何人可以提供的任何帮助或建议。
最佳答案
您需要按比赛编号、球队和获胜类型列出的第一组结果
您需要按比赛号码和获胜类型的第二组结果
select
MatchNumber,
group_concat( Winners ) Winners,
group_concat( Losers ) Losers
from
(
select
MatchNumber,
TeamNumber,
case Result when 'W'
then group_concat(IndividualName separator '&') end Winners,
case Result when 'L'
then group_concat(IndividualName separator '&') end Losers,
group_concat(Result separator '&') r
from
Resultstbl
group by
MatchNumber, TeamNumber
) g
group by MatchNumber
关于mysql - 多个group_concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21403764/