簡體   English   中英

將列轉換為單行並選擇唯一的條目

[英]Convert columns to a single row and select unique entries

當前,該表如下所示。 這基本上是排行榜條目的列表,此時一切看起來都很好。

+-------+-----------------+-------+--------------+--------------+--------------+--------------+----------------------+----------+
| entry | challenge_level | proof | player1_name | player2_name | player3_name | player4_name |   submission_date    | approved |
+-------+-----------------+-------+--------------+--------------+--------------+--------------+----------------------+----------+
|     8 |              52 | url   | PLAYER_A     | PLAYER_D     | PLAYER_B     | PLAYER_C     | 2018-07-16T16:14:01Z | true     |
|     9 |              60 | url   | PLAYER_C     | PLAYER_K     | PLAYER_X     | PLAYER_Y     | 2018-07-16T16:33:10Z | true     |
|    11 |              51 | url   | PLAYER_A     | PLAYER_B     | PLAYER_C     | PLAYER_D     | 2018-07-16T17:42:13Z | true     |
|    13 |              45 | url   | PLAYER_C     | PLAYER_H     | PLAYER_J     | PLAYER_D     | 2018-07-16T18:26:59Z | true     |
|    14 |              61 | url   | PLAYER_A     | PLAYER_C     | PLAYER_I     | PLAYER_B     | 2018-07-16T21:09:55Z | true     |
|    15 |              36 | url   | PLAYER_A     | PLAYER_C     | PLAYER_D     | PLAYER_B     | 2018-07-17T08:24:37Z | true     |
|    16 |              62 | url   | PLAYER_E     | PLAYER_C     | PLAYER_F     | PLAYER_G     | 2018-07-17T09:37:13Z | true     |
+-------+-----------------+-------+--------------+--------------+--------------+--------------+----------------------+----------+

當我想要將所需結果格式化為以下所需結果時,問題就開始了

+-------+-----------------+-------+--------------+----------------------+----------+
| entry | challenge_level | proof | PLAYER_NAME  |   submission_date    | approved |
+-------+-----------------+-------+--------------+--------------+--------------+---+
|     14 |              61  | url   | PLAYER_A     | 2018-07-16T16:14:01Z | true     |
|     14 |              61  | url   | PLAYER_B     | 2018-07-16T16:33:10Z | true     |
|   16   |              62  | url   | PLAYER_C     | 2018-07-16T17:42:13Z | true     |
|    8  |              52  | url   | PLAYER_D     | 2018-07-16T18:26:59Z | true     |
|    16  |              62  | url   | PLAYER_E     | 2018-07-16T21:09:55Z | true     |
|    16  |              62  | url   | PLAYER_F     | 2018-07-17T08:24:37Z | true     |
|    16  |              62  | url   | PLAYER_G     | 2018-07-17T09:37:13Z | true     |
+-------+-----------------+-------+--------------+--------------+--------------+---+

最重要的是,要考慮一個重要因素,玩家可以出現多次,例如, PLAYER_A被列在多個條目中,但結果應該是他所做的最高Challenge_level-玩家名稱必須唯一且不能出現多次獲得理想的結果。

我不知道從哪里開始,任何提示都是有價值的。

SqlFiddle >>表架構>>

http://sqlfiddle.com/#!9/869812/21

SELECT l.`entry`,
  l.`challenge_level`,
  l.`proof`,
  l_max.player,
  l.`submission_date`,
  l.`approved`
FROM leaderboards l
INNER JOIN
(SELECT player, MAX(challenge_level) as `level`
FROM (SELECT l1.`entry`,
  l1.`challenge_level`,
  l1.`proof`,
  l1.`player1_name` as player,
  l1.`submission_date`,
  l1.`approved`
FROM leaderboards l1
UNION ALL
SELECT l2.`entry`,
  l2.`challenge_level`,
  l2.`proof`,
  l2.`player2_name`,
  l2.`submission_date`,
  l2.`approved`
FROM leaderboards l2
UNION ALL
SELECT l3.`entry`,
  l3.`challenge_level`,
  l3.`proof`,
  l3.`player3_name`,
  l3.`submission_date`,
  l3.`approved`
FROM leaderboards l3
UNION ALL
SELECT l4.`entry`,
  l4.`challenge_level`,
  l4.`proof`,
  l4.`player4_name`,
  l4.`submission_date`,
  l4.`approved`
FROM leaderboards l4
) l_all
GROUP BY l_all.player) l_max
ON l.challenge_level = l_max.level
  and (l.player1_name = l_max.player
       OR l.player2_name = l_max.player
       OR l.player3_name = l_max.player
       OR l.player4_name = l_max.player)

暫無
暫無

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

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