با استفاده از تابع 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) برای خوانایی بهتر یا از یک زیرپرسش معمولی استفاده کنید.

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

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

گزارش

1 پاسخ

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

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