با استفاده از تابع 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 برای سناریوهای دیگر تغییر دهید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای نمایش اطلاعات هر کارمند به همراه کمترین حقوق در دپارتمان مربوطه از 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 صرفاً برای نمایش همزمان سایر ستونهای کارمند با کمترین حقوق همان پارتیشن مفید است.
گزارش