簡體   English   中英

多個group_concat

[英]Multiple 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在結果='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

因此,在MatchNumber 1上,獲勝者只有1支隊伍,而輸者有2支隊伍。 同一團隊中的個人以“&”連接,而不同團隊中以“,”連接。 第2場比賽每隊只有1個人,因此不需要特殊角色。 第3場比賽在獲勝者和失敗者上都有1個由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

給這個bash:

select MatchNumber,
  group_concat(Winners order by TeamNumber),
  group_concat(Losers order by TeamNumber)
from
(
 select MatchNumber,TeamNumber,
  group_concat(case when Result = 'W' then IndividualName end SEPARATOR " & ") as Winners,
  group_concat(case when Result = 'L' then IndividualName end SEPARATOR " & ") as Losers
  from ResultsTbl
 group by MatchNumber, TeamNumber
) t
group by MatchNumber
;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM