ray88’s diary

お仕事で困ったとき用の自分用の覚書

SQL指南書 ランキング(自己非等値結合)

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」を除外する

■ロジック解説