برای هر ماه در جدول sales با ستونهای salesperson، amount و month، درصد رتبه (PERCENT_RANK) مجموع فروش هر فروشنده را محاسبه کنید و خروجی را شامل month، salesperson، total_sales و percent_rank نمایش دهید.
2.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:21 0.0
برای حل این مسئله از MySQL 8+ و توابع پنجرهای استفاده کنید: ابتدا با یک CTE یا زیردرسوج (subquery) مجموع فروش (SUM(amount)) را برای هر salesperson در هر ماه با GROUP BY محاسبه کنید، سپس روی آن مجموعه PERCENT_RANK() OVER (PARTITION BY month ORDER BY total_sales DESC) را اعمال کنید تا درصد رتبه هر فروشنده در چارچوب همان ماه بدست آید. نکات: ترتیب ORDER BY جهت تفسیر رتبه (بیشترین به کمترین یا بالعکس) مهم است، PERCENT_RANK مقدار 0..1 برمیگرداند و برای پارتیشنهای تکرددی مقدار خاصی (مثلاً 0 یا NULL) نشان داده میشود؛ در صورت نیاز از COALESCE برای مقداردهی جایگزین استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
نکته کلیدی این راهحل استفاده از توابع پنجرهای در MySQL 8+ است: ابتدا مجموع فروش هر فروشنده در هر ماه را با GROUP BY محاسبه کن و سپس PERCENT_RANK() OVER (PARTITION BY month ORDER BY total_sales DESC) را اجرا کن تا درصد رتبه هر فروشنده در همان ماه بهدست آید. اگر پارتیشن با یک ردیف مواجه شود، مقدار PERCENT_RANK ممکن است NULL شود و در این صورت میتوان با COALESCE مقدار جایگزین مثل 0 تعیین کرد. توجه کن که ترتیب DESC باعث میشود بالاترین فروش در ابتدا باشد و درصد رتبه برای این ردیف معمولاً 0 باشد؛ اگر میخواهی بالاترین فروش را 1 در نظر بگیری، از ASC استفاده کن یا مقدار را تبدیل کن. برای بهبود کارایی، از ایندکس روی (month, salesperson) استفاده کن و در صورت لزوم یک CTE برای محاسبه total_sales قبل از اعمال پنجره استفاده کن.
گزارش