我正在尝试为多项目比赛建立记分牌。
我有一个包含这样数据的表:
id competitor wod score
1 Noah Ohlsen 01 350
2 Noah Ohlsen 02 430
3 Noah Ohlsen 03 140
4 Noah Ohlsen 04 314
我有一个 SQL 查询,它根据“wod”获得医学排名:
SELECT
competitor,
FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM wodcomp.scoring WHERE wod='01' )
) AS wod01,
FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM wodcomp.scoring WHERE wod='02' )
) AS wod02,
FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM wodcomp.scoring WHERE wod='03' )
) AS wod03,
FIND_IN_SET( score, (
SELECT GROUP_CONCAT( score
ORDER BY score DESC )
FROM wodcomp.scoring WHERE wod='04' )
) AS wod04
FROM
wodcomp.scoring competitor;
结果是:
Competitor wod01 wod02 wod03 wod04
Noah Ohlsen 1 0 0 0
Noah Ohlsen 0 1 0 0
Noah Ohlsen 0 0 1 0
Noah Ohlsen 0 0 0 1
我希望它是一个组合行:
Competitor wod01 wod02 wod03 wod04
Noah Ohlsen 1 1 1 1
或者甚至根据不同世界中的综合排名对所有事件进行总计,如下所示:
Competitor wod01 wod02 wod03 wod04 wodtotal
Noah Ohlsen 1 1 1 1 1
最佳答案
您可以使用以下查询:
SELECT competitor,
FIND_IN_SET( MAX(CASE WHEN wod='01' THEN score END),
(SELECT GROUP_CONCAT( score ORDER BY score DESC )
FROM scoring WHERE wod = '01' )) AS wod01,
FIND_IN_SET( MAX(CASE WHEN wod='02' THEN score END),
(SELECT GROUP_CONCAT( score ORDER BY score DESC )
FROM scoring WHERE wod = '02' )) AS wod02,
FIND_IN_SET( MAX(CASE WHEN wod='03' THEN score END),
(SELECT GROUP_CONCAT( score ORDER BY score DESC )
FROM scoring WHERE wod = '03' )) AS wod03,
FIND_IN_SET( MAX(CASE WHEN wod='04' THEN score END),
(SELECT GROUP_CONCAT( score ORDER BY score DESC )
FROM scoring WHERE wod = '04' )) AS wod04,
FIND_IN_SET( SUM(score),
(SELECT GROUP_CONCAT(total_score ORDER BY total_score DESC)
FROM (SELECT SUM(score) AS total_score
FROM scoring
GROUP BY competitor) AS t)) AS wod
FROM scoring
GROUP BY competitor
关于MySQL 在记分牌的多个数据集上排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36166479/