我正试图为多项赛事建立一个记分牌。
我有一个包含这样数据的表:
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":
获得med rankSELECT
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
或者甚至根据不同的wod中的组合排名对事件进行总计,例如:
Competitor wod01 wod02 wod03 wod04 wodtotal
Noah Ohlsen 1 1 1 1 1
答案 0 :(得分:0)
您可以使用以下查询:
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