製品でいっぱいの SQL Server データベースがあり、各製品には 1 つのスタイル レコードと 1 つ以上の SKU レコードがあります。これらのテーブルで、dense_rank() を使用してクエリのページ付けを正常に行うことができますが、style_id 以外の列に基づいてスタイルを注文する方法を理解することはできません。各スタイルの増分ランク。
私は現在、このクエリを使用しています:
SELECT *
FROM
(
SELECT
styles.style_id
styles.department,
styles.style,
styles.brand,
styles.description,
skus.sku_id,
skus.color,
skus.size,
skus.price,
skus.creation_date,
DENSE_RANK() OVER (ORDER BY styles.style_id) AS style_rank
FROM skus
LEFT OUTER JOIN styles ON styles.style_id=skus.style_id
WHERE skus.color='blue'
AND styles.brand='acme'
) AS t1
WHERE
t1.style_rank > 0 AND t1.style_rank <= 25
上記により、スタイル レベルでページネーションを行うことができますが、価格 ASC/DESC または creation_date ASC/DESC に基づいてこれらのスタイルを並べ替えることができる必要があります。sort styles by MAX(skus.price) のような集計関数でソートを制御できると便利ですが、必須ではありません。
明確にするために、1 つのスタイルに 3 つの SKU があり、これら 3 つの SKU のそれぞれが異なる価格である可能性があります。
これは、RDBMS を使用するすべての小売 Web サイトにとって非常に基本的なニーズのようですが、これを行う方法に関するドキュメントは見つかりません。
これを行う方法についての提案は大歓迎です。
編集:2つのクエリを使用してこれを解決しました(以下の回答に示されています)。