mysql - 多个group_concat

标签 mysql grouping group-concat

我正在为一个 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/

相关文章:

MYSQL查询从表中输出具有重复字段的查询

java - 我可以结合按功能分组对流进行分区吗?

python - Pandas 按时间分组,指定开始时间非整数分钟

Mysql group_concat 具有来自另一行的不同值

mysql - 查询中 Mysql SUM 和 GROUP_CONCAT 的问题

mysql - 如何对表内容进行智能排序并在 MySQL 查询中添加样式?

mysql - mysql 触发器编译但在必要时不会触发

mysql - 在MySQL 5中,如何根据连接编写 "not exists"子查询?

mysql - 将 SQL ALL 函数与 HAVING COUNT(*) >= 混淆

python - 根据条件对 Pandas 系列进行分组