私のテーブルの1つの行のdense_rank
を得るために、(最後に)次のPSQLクエリを使用することはできますが、このよう:PSQL dense_rankの1つのアイテムが別個の合計アイテムのうち
dense_rank OUT OF total distinct ranks
、私は100行を有し、選択された行が14ランク(のみ59の異なるランクがある)されている場合dense_rank
は、いわば、「関係」を可能にするので、私は言うこと:
Ranked 14th out of 59
これを達成するためにクエリを変更する方法はありますか、複数のクエリを使用する必要はありますか?
SELECT ranked.*
FROM
(SELECT id,
postable_id,
spread_count,
bury_count,
read_count,
(spread_count*3) + (bury_count*-2) + (read_count*-1) AS score,
dense_rank() OVER (
ORDER BY (spread_count*3) + (bury_count*-2) + (read_count*-1) DESC) AS RANK
FROM posts) AS ranked
WHERE id = ?
これは@vkpを動作させるようです。時間があればこの黒い魔法を説明できますか?とても有難い。 – lightyrs
@lightyrs ..私が追加した唯一の追加事項は、最大ランク(この例では59)を取得する 'MAX(RNK)OVER()'です。 'RNK'はあなたがすでに計算したものです。それらを連結することで、必要なものが得られます。 –