شرح صفوف ومحتوى الفقرة
نظراً لأن دوال النوافذ تُنفَّذ منطقياً بعد جملة WHERE، لا يسمح SQL بكتابة دالة نافذة مباشرة داخل WHERE. ولحل مسألة استخراج أعلى N سجلات في كل فئة (مثل أغلى 3 منتجات داخل كل قسم)، ندمج تعبير WITH مع دالة الترتيب:
- الخطوة الأولى (داخل CTE): نحسب عمود الترتيب
DENSE_RANK() OVER (PARTITION BY category_id ORDER BY unit_price DESC) AS price_rank. - الخطوة الثانية (في الاستعلام الخارجي): نصفي مخرجات التعبير الجدولي بكتابة
WHERE price_rank <= 3.
SQL
-- Fetch top 2 products per category via CTE + DENSE_RANK
WITH ranked_products AS (
SELECT product_id, category_id, product_title, unit_price,
DENSE_RANK() OVER (
PARTITION BY category_id ORDER BY unit_price DESC
) AS price_rank
FROM products
)
SELECT category_id, product_title, unit_price, price_rank
FROM ranked_products WHERE price_rank <= 2;