برنامه نویسی

درآمد کارکنان بیشتر از مدیرانشان | LeetCode | MSSQL

مشکل

با توجه به جدول کارمندان یک شرکت، ما وظیفه داریم یک پرس و جوی SQL بنویسیم تا کارکنانی را که حقوق بیشتری نسبت به مدیران خود دریافت می کنند شناسایی کنیم. هر ردیف در جدول Employee شناسه کارمند، نام، حقوق و شناسه مدیر آنها را ارائه می دهد.

جدول: کارمند

نام ستون تایپ کنید
شناسه بین المللی
نام varchar
حقوق بین المللی
شناسه مدیر بین المللی

راه حل

ما دو راه حل SQL برای این مشکل را بررسی خواهیم کرد. هر یک از آنها رویکرد کمی متفاوت برای شناسایی کارمندانی دارند که درآمد بیشتری نسبت به مدیران خود دارند.

کد منبع 1

اولین قطعه کد از یک تودرتو استفاده می کند SELECT بیانیه در WHERE عبارت. پرسش فرعی حقوق مدیر هر کارمند را پیدا می کند و پرس و جو اصلی آن را با حقوق کارمند مقایسه می کند:

SELECT e.name AS Employee
FROM Employee e
WHERE e.salary > (
    SELECT m.salary
    FROM Employee m
    WHERE m.id = e.managerId
)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با زمان اجرا 746 میلی ثانیه، این راه حل 76.97 درصد از راه حل های دیگر را شکست می دهد. این روش می تواند کمی کندتر به دلیل زیرپرسوجوی تو در تو که برای هر کارمند اجرا می شود.

اولین کد منبع

کد منبع 2

راه حل دوم از a استفاده می کند JOIN بند برای ترکیب ردیف هایی از جدول Employee جایی که کارمند است managerId با مدیر مطابقت دارد id. سپس از a استفاده می کند WHERE بند برای مقایسه حقوق:

SELECT e1.name AS Employee
FROM Employee e1 JOIN Employee e2 ON e1.managerId = e2.id
WHERE e1.salary > e2.salary
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این راه حل دارای زمان اجرا سریعتر 662 میلی ثانیه است که 94.99٪ از راه حل های دیگر را شکست می دهد. با استفاده از JOIN، ما به طور موثر تعداد عملیات را کاهش می دهیم زیرا از اجرای پرس و جوی فرعی برای هر ردیف اجتناب می کنیم.

کد منبع دوم

نتیجه

در حالی که هر دو راه حل پاسخ صحیح را ارائه می دهند، راه حل دوم به دلیل استفاده از آن عملکرد بهتری دارد JOIN برای جلوگیری از اجراهای متعدد فرعی با این حال، درک این نکته ضروری است که انتخاب روش به الزامات و محدودیت‌های خاص پایگاه داده یا سناریوی مشکل شما بستگی دارد.

می توانید مشکل اصلی را در LeetCode پیدا کنید.

برای راه‌حل‌های روشن‌تر و محتوای مرتبط با فناوری، در صفحه Beacons من با من در ارتباط باشید.

1684443382 169 درآمد کارکنان بیشتر از مدیرانشان LeetCode MSSQL

@ranggakd | خلاصه خلاصه جزئیات مرکز اوه سلام، من یک برنامه نویس هستم.

فاویکون
beacons.ai

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا