Light Athletic の大会結果の表があります。プレイヤーは上位 3 位までポイントを獲得します。陸上競技のポイントの名前のリストが必要です。私はこれを持っています:
SELECT NAME, SUM(many) as sum FROM
(
(SELECT NAME, count(*) * (SELECT points from "points for place" where place = 1) as many
FROM RESULTS R1 WHERE
(SELECT count(*) FROM RESULTS R2 WHERE
R1.result < R2.result
AND R1.DISCIPLINE = R2.DISCIPLINE
AND R1.CITY = R2.CITY) = 0
GROUP BY NAME)
UNION
(SELECT NAME, count(*) * (SELECT points from "points for place" where place = 2) as many
FROM RESULTS R1 WHERE
(SELECT count(*) FROM RESULTS R2 WHERE
R1.result < R2.result
AND R1.DISCIPLINE = R2.DISCIPLINE
AND R1.CITY = R2.CITY) = 1
GROUP BY NAME)
UNION
(SELECT NAME, count(*) * (SELECT points from "points for place" where place = 3) as many
FROM RESULTS R1 WHERE
(SELECT count(*) FROM RESULTS R2 WHERE
R1.result < R2.result
AND R1.DISCIPLINE = R2.DISCIPLINE
AND R1.CITY = R2.CITY) = 2
GROUP BY NAME)
)
GROUP BY NAME ORDER BY SUM;
私はほぼ同じ冗長コードを3回持っています。これが場所に依存していない場合は、ビューを使用できます...