با استفاده از تابع ROW_NUMBER() در MySQL، سه کارمند دارای بالاترین حقوق برای هر دپارتمان را همراه با شماره ردیفِ مربوطه نمایش دهید.
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:08 0.0
برای حل این مسئله از تابع پنجرهای ROW_NUMBER() استفاده کنید: ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) را در یک CTE یا زیرپرسش محاسبه کرده و سپس ردیفهایی را که شماره ردیفشان کمتر یا مساوی 3 است فیلتر کنید. توجه کنید که این قابلیت در MySQL 8.0+ در دسترس است؛ میتوانید از WITH (CTE) برای خوانایی بهتر یا از یک زیرپرسش معمولی استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
استفاده از ROW_NUMBER() در MySQL 8+ برای نمایش سه کارمند با بالاترین حقوق در هر دپارتمان ایده خوبی است، و با PARTITION BY department_id و ORDER BY salary DESC کار تقسیم و ترتیب انجام میشود. توجه کنید ROW_NUMBER فقط سه ردیف را در هر partition میدهد و در صورت وجود حقوق برابر ممکن است برخی همحقوقیها حذف شوند؛ اگر میخواهید تمام همردهها را بگنجانید از RANK() یا DENSE_RANK() استفاده کنید. برای خوانایی بهتر میتوانید از یک CTE یا زیرپرسش استفاده کنید و در نهایت WHERE rn <= 3 را فیلتر کنید. به منظور کارایی بهتر، اضافه کردن اندیس روی (department_id, salary) یا (department_id, salary DESC) میتواند به بهبود اجرای پنجرهای کمک کند.
گزارش