SQL 指南書集 目次 - ray88’s diary
■以下は要件に応じて様々な順位付け方式にカスタマイズすることが可能な柔軟なSQL
/* ランキング 1 位から始まる。同順位が続いた後は不連続(p.37) */ SELECT P1.name, P1.price, (SELECT COUNT(P2.price) FROM Products P2 WHERE P2.price > P1.price) + 1 AS rank_1 FROM Products P1 ORDER BY rank_1 ASC;
※同じ順位が存在する場合でも、順位を飛び石にせず連続的に出力する場合
「 (SELECT COUNT(P2.price)」を「 (SELECT COUNT(DISTINCT P2.price)」とする
※トップが0位からスタートさせたい場合
「WHERE P2.price > P1.price) + 1 AS rank_1」の「+1」を除外する
■ロジック解説