برای هر ماه در جدول 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 برای مقداردهی جایگزین استفاده کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:21
دسته بندی ها: MySQL MySQL for beginner
arman در 221 روز قبل ساعت 13:36

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

گزارش

1 پاسخ

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

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