برای هر دستهبندی (category) محصولات، با استفاده از تابع RANK، هر محصول را بر اساس مجموع فروش (total_sales) به صورت نزولی رتبهبندی کرده و ستونهای product_id, category_id, total_sales و rank را نمایش دهید.
1.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 01:45 0.0
برای حل از MySQL 8+ استفاده کنید؛ ابتدا مجموع فروش هر محصول را با GROUP BY در یک زیرپرسوجو یا CTE محاسبه کنید سپس روی نتیجه از تابع پنجرهای RANK() OVER (PARTITION BY category_id ORDER BY total_sales DESC) استفاده کنید تا رتبه هر محصول در دسته خود بدست آید. نکته: RANK در صورت برابری مقدارها رتبهی برابر میدهد و بین رتبهها فاصله ایجاد میکند؛ اگر نمیخواهید فاصله باشد از DENSE_RANK استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته کلیدی این است که ابتدا مجموع فروش هر محصول را با GROUP BY محاسبه کرده و سپس با RANK() OVER (PARTITION BY category_id ORDER BY total_sales DESC) رتبه در هر دسته را تعیین کنید. در MySQL 8+ این کار را میتوانید با یک CTE یا subquery انجام دهید و توجه کنید RANK برای مقادیر برابر رتبههای برابر میدهد و بین آنها فاصله میافتد؛ اگر نمیخواهید فاصله باشد از DENSE_RANK استفاده کنید. همچنین از aliasing مناسب و اطمینان از وجود category_id در کل خروجی استفاده کنید تا نتایج صحیح باشند. در نهایت خروجی باید شامل product_id, category_id, total_sales و rank باشد.
گزارش