برای جدول sales (id, salesperson, sale_date, amount) یک کوئری بنویسید که برای هر فروشنده ردیف‌ها را بر اساس amount به صورت نزولی شماره‌گذاری کند و تنها بیشترین فروش (row_number = 1) هر فروشنده را نمایش دهد؟

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:09

0.0

با استفاده از تابع پنجره‌ای ROW_NUMBER() در MySQL 8+ می‌توانید ROW_NUMBER() OVER(PARTITION BY salesperson ORDER BY amount DESC) را محاسبه کنید و از یک CTE یا زیرپرسش برای فیلتر کردن رکوردهایی که row_number = 1 هستند بهره ببرید؛ نکته: باید از نسخه‌ای از MySQL استفاده کنید که توابع پنجره‌ای را پشتیبانی می‌کند و برای خوانایی می‌توانید از WITH (CTE) یا یک زیرپرسش استفاده کنید.

توسط پژوهشگر در 220 روز قبل ساعت 02:09
دسته بندی ها: MySQL MySQL for beginner
nima در 220 روز قبل ساعت 10:46

برای هر فروشنده با ROW_NUMBER() و PARTITION BY فروشنده و ORDER BY amount DESC، برای هر فروشنده یک شماره ترتیب اختصاص می‌یابد. به منظور نتیجه‌ای قابل پیش‌بینی در برابر مقادیر برابر، بهتر است ORDER BY را با یک فاکتور ثانویه مانند id یا sale_date تکمیل کنید (مثلاً ORDER BY amount DESC, id ASC). سپس فیلتر کنید تا فقط ردیف‌های با row_number = 1 باقی بمانند و نمایانگر بیشترین فروش هر فروشنده باشند. اطمینان حاصل کنید که نسخه MySQL شما از توابع پنجره‌ای پشتیبانی می‌کند (نسخه 8 به بالا) و اگر می‌خواهید رده بندی‌های مساوی را نیز در نظر بگیرید، می‌توانید از RANK() یا DENSE_RANK() استفاده کنید.

گزارش

1 پاسخ

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

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