یک پرسوجو بنویسید که برای هر دپارتمان در جدول employees کارکنان را بر اساس حقوق (salary) به صورت نزولی مرتب کند و با استفاده از تابع ROW_NUMBER به هر ردیف شماره ردیف اختصاص دهد
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:00 0.0
برای حل این مسئله از تابع پنجرهای ROW_NUMBER() در MySQL 8+ استفاده کنید: ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num؛ این عبارت شمارهگذاری را برای هر دپارتمان جداگانه انجام میدهد و با ORDER BY داخل OVER میتوانید ترتیب حقوق را تعیین کنید. برای خوانایی یا فیلتر کردن نتایج (مثلاً گرفتن ۳ نفر برتر هر دپارتمان) میتوانید از یک CTE یا زیردرسِجویی که این شمارهگذاری را ایجاد میکند استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای هر دپارتمان در جدول employees میتوانید از ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num استفاده کنید تا شماره ردیف هر کارمند نسبت به سایر همدپارتمانیها مشخص شود. اگر میخواهید فقط ۳ نفر برتر هر دپارتمان را بگیرید، میتوانید از یک CTE یا زیردرخواست استفاده کنید و شرط WHERE row_num <= 3 اضافه کنید. توجه کنید که اگر حقوق NULL است، در نظر گرفتن آن با COALESCE(salary, 0) یا مدیریت NULL در ORDER BY را در نظر بگیرید تا نتایج به درستی مرتب شوند. برای کارایی، شاخص روی (department_id, salary) مفید است، اما برخی نسخههای MySQL ممکن است نتوانند به طور کامل از اندیس در پنجرهها بهره ببرند.
گزارش