برای هر دسته‌بندی (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 استفاده کنید.

توسط پژوهشگر در 220 روز قبل ساعت 01:45
دسته بندی ها: MySQL MySQL for beginner
nima در 220 روز قبل ساعت 12:06

نکته کلیدی این است که ابتدا مجموع فروش هر محصول را با 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 باشد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری