透视具有两列的 MySQL 表:竞争对手和分数。我需要将每个参赛者的前 10 名分数显示为字段

问题描述 投票:0回答:1

我有一个 MySQL 表,其中有两列:竞争对手和分数,在 12 个月的时间内每周编译一次。每个参赛者最多可以有 48 排,以满足每周得分的要求。 我想创建一个表格,显示每个参赛者的前 10 名分数,其列/字段如下;

竞争对手,分数1,分数2,分数3,……,分数10,分数(前10名总和)

我已经看过多个数据透视表示例,但我还没有找到一种方法来列出 10 列/字段的原始分数。

希望有人能指出我正确的方向。

我已经尝试了几个 mySQL 数据透视表示例,但它们都依赖于聚合函数,而且我无法找到一种方法来列出 10 个字段中每个竞争对手的前 10 个原始分数。

mysql pivot
1个回答
0
投票

您可以使用子查询中的窗口函数来完成此操作:

WITH rankedScores AS (
  SELECT
    Competitor,
    Score,
    RANK() OVER (PARTITION BY Competitor, ORDER BY Score DESC) AS rn
  FROM mytable
)
SELECT
  Competitor,
  MAX(IF(rn = 1, Score, NULL)) AS Score1,
  MAX(IF(rn = 2, Score, NULL)) AS Score2,
  MAX(IF(rn = 3, Score, NULL)) AS Score3,
  MAX(IF(rn = 4, Score, NULL)) AS Score4,
  MAX(IF(rn = 5, Score, NULL)) AS Score5,
  MAX(IF(rn = 6, Score, NULL)) AS Score6,
  MAX(IF(rn = 7, Score, NULL)) AS Score7,
  MAX(IF(rn = 8, Score, NULL)) AS Score8,
  MAX(IF(rn = 9, Score, NULL)) AS Score9,
  MAX(IF(rn = 10, Score, NULL)) AS Score10,
  SUM(IF(rn <= 10, Score, NULL)) AS ScoreTotalTop10
FROM rankedScores
GROUP BY Competitor
© www.soinside.com 2019 - 2024. All rights reserved.