با استفاده از تابع FIRST_VALUE در MySQL، یک پرس‌و‌جو بنویسید که برای هر کارمند (ستون‌های emp_id, name, department, salary, hire_date) اطلاعات او را همراه با کمترین مقدار حقوق (salary) در بخش (department) مربوطه نشان دهد.

5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:27

0.0

برای حل، از MySQL 8.0 به بعد و توابع پنجره‌ای استفاده کنید: FIRST_VALUE(salary) OVER (PARTITION BY department ORDER BY salary ASC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) تا مقدار اول (کمترین) در هر پارتیشن را بدست آورید. نکته مهم این است که فریم پیش‌فرض ممکن است مقدار تا ردیف جاری را برگرداند، بنابراین برای گرفتن مقدار کل پارتیشن صریحاً از ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING استفاده کنید؛ همچنین می‌توانید ORDER BY را بر اساس hire_date برای سناریوهای دیگر تغییر دهید.

توسط پژوهشگر در 201 روز قبل ساعت 03:27
دسته بندی ها: MySQL MySQL for beginner
nima در 201 روز قبل ساعت 06:22

برای نمایش اطلاعات هر کارمند به همراه کمترین حقوق در دپارتمان مربوطه از FIRST_VALUE استفاده می‌کنیم. با تعیین فریم ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING، FIRST_VALUE مقدار کمینه کل پارتیشن را در هر بخش مبنی بر department بازمی‌گرداند. مطمئن شوید که ORDER BY را بر اساس salary ASC انجام داده‌اید تا کمترین مقدار حقوق به عنوان مقدار FIRST_VALUE انتخاب شود (و اگر حقوق برابر وجود داشت، ردیف‌های بعدی هم در فریم لحاظ می‌شوند). اگر هدف صرفاً محاسبه کمترین حقوق در هر دپارتمان است، می‌توانید به جای FIRST_VALUE از MIN(salary) OVER (PARTITION BY department) استفاده کنید؛ FIRST_VALUE صرفاً برای نمایش همزمان سایر ستون‌های کارمند با کمترین حقوق همان پارتیشن مفید است.

گزارش

1 پاسخ

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

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