من ربات ترجمیار هستم و خلاصه مقالات علمی رو به صورت خودکار ترجمه میکنم. متن کامل مقالات رو میتونین به صورت ترجمه شده از لینکی که در پایین پست قرار میگیره بخونین
سوالات رایج از توابع SQL هنگام مصاحبهها
منتشرشده در: towardsdatascience به تاریخ 11 فوریه 2021
لینک منبع: Top Skills to Ace Every SQL Interview Question
تقریبا همیشه یک بخش SQL در هر مصاحبه در موقعیت داده محور وجود دارد. چه شما برای یک تحلیلگر، علوم مهندسی، یا نقش علوم داده مصاحبه میکنید، SQL همیشه مسیر خود را به بخش کدگذاری فرآیند طی خواهد کرد. هنگامی که چند مفهوم کلیدی را بیاموزید، میتوانید تقریبا به هر سوالی با تمرین زیاد پاسخ دهید. برای هر یک از این مفاهیم با اصول اولیه شروع کنید و راه خود را به سمت مشکلات سختتر باز کنید.
در اینجا سه مفهوم کلیدی که برای موفقیت در مصاحبه با SQL خود که باید بدانید آورده شده است:
توابع Join
شما مشکلی پیدا نمیکنید که شامل یک پیوند نباشد. تفاوت بین یک پیوند معمولی، پیوند درونی/داخلی، و پیوند چپ را بدانید. زمانی که بتوانید بین اینها تمایز قائل شوید و از آنها در سناریوهای مناسب استفاده کنید، شما داوطلب طلایی خواهید بود.
پیوند درونی زمانی استفاده میشود که شما تنها ارزشهای موجود در هر دو جدول را میخواهید. این روش مقادیر را در هر ستونهایی که به آنها متصل میشوید مقایسه میکند به طوری که تنها ردیفهای با مقادیر منطبق در این ستونها در جدول حاصل حضور دارند.
مثال: فرض کنید میخواهید فیلمهای ترسناک پیدا کنید که در حال حاضر در تئاتر نمایش داده میشوند. جدول ScaryMovies شامل تمام فیلمهای ترسناک در تئاتر است. جدول NowPlaying شامل تمام فیلمهایی است که در حال حاضر در تئاتر نمایش داده میشوند.
SELECT
ScaryMovies.name
FROM NowPlaying
INNER JOIN ScaryMovies
ON NowPlaying.movie_id = ScaryMovies.movie_id
پیوند این جدولها با استفاده از یک پیوند داخلی، تنها فیلمهایی را انتخاب خواهد کرد که در حال حاضر در تئاتر نمایش داده میشوند و تنها فیلمهایی که در جدول فیلمهای ترسناک قرار دارند (یا همپوشانی بین این دو جدول).
پیوند یا اتصال چپ زمانی مورد استفاده قرار میگیرد که شما مقادیر موجود در جدول اول و همچنین مقادیر منطبق در جدول دوم را میخواهید. من دوست دارم از خودم بپرسم، من واقعا چه اطلاعاتی را در جدول دوم میخواهم؟ اگر من به دنبال تمام دادهها در جدول به علاوه یک ستون از جدول دیگر هستم، معمولا از یک اتصال چپ استفاده میکنم. دادههای اصلی شما تقریبا شبیه به جدول اول، به علاوه چند ستون اضافی خواهد بود.
به یاد داشته باشید که وقتی از یک اتصال چپ استفاده میکنید، اگر هیچ تطابقی در جدول اول و جدول دوم وجود نداشته باشد، ستونهایی که از جدول اول به دست میآورید، پوچ (null) خواهند بود.
مثال: بیایید دوباره از جدولNowPlaying استفاده کنیم. این جدول تنها شامل یک movieId برای تشخیص فیلم است. تمام اطلاعات دیگر مانند نام، نوع، و رتبهدهی در مورد هر فیلم در یک جدول MovieDetails است. ما میخواهیم جزئیات را در مورد همه فیلمهایی که در حال حاضر در تئاتر هستند پیدا کنیم.
SELECT
NowPlaying.movie_id,
Movies.name,
Movies.type,
Movies.rating
FROM NowPlaying
LEFT JOIN Movies
ON NowPlaying.movie_id = Movies.movie_id
در اینجا، ما فقط جزئیات فیلم را در مورد فیلمهای جدول NowPlaying و برخی جزئیات دیگر که میتوانیم از جدول فیلمها استفاده کنیم میخواهیم. استفاده از یک پیوند چپ منجر به این خواهد شد که تمام movieIdهای جدولNowPlaying در جدول نتیجه و همچنین نام، نوع و رتبه آن در صورت وجود در جدول فیلمها، وجود داشته باشد. اگر شناسه فیلم(movie_id) از سمت چپ در سمت راست وجود نداشته باشد، نام، نوع، و ستونهای ردهبندی برای آن ردیف صفر خواهد بود.
در آخر، پیوند است، که از همه آنها پایهایتر است. همچنین این را به عنوان پیوند خارجی کامل خواهید دید، اما سادهترین کار این است که فقط در کد خود Join را بنویسید. این مورد زمانی استفاده میشود که شما تمام ارزشهای هر دو جدول را میخواهید. این به ویژه زمانی مفید است که به دنبال مقادیر متوالی در یک شناسه یا ستون تاریخ باشیم.
مثال: فرض کنید که میخواهید همه فیلمهایی که ۲ روز پشت سر هم نمایش داده شدند را پیدا کنید.
SELECT
DISTINCT a.name
FROM Movies a
JOIN Movies b
ON a.play_date + 1 = b.play_date
در اینجا من به همان جداول ملحق میشوم اما براساس تاریخ پخش به آنها متصل میشوم به طوری که تنها فیلمهایی که دو روز پشت سر هم نمایش داده شدهاند در جدول جای میگیرند. فیلمهایی که دو روز پشت سر هم پخش نشدند، متصل نخواهد شد.
شاید مطالعه مقاله تفاوتهای دادهکاوی و متنکاوی برای شما مفید باشد.
توابع جمع
درست مانند پیوندها، متوجه خواهید شد که تقریبا باید در هر مسئله پرسیده شده در مصاحبه از برخی انواع توابع جمع استفاده کنید.
اینها کاملا خود-توصیفی هستند اما کلید کار در اینجا این است که بدانیم چگونه از این موارد به درستی با توابع GROUP BY استفاده کنیم.
توابع MIN () و MAX () دقیقا همان چیزی هستند که به نظر میرسند. آنها حداقل یا حداکثر مقدار ستون مشخصشده در یک گروه (یا کل جدول) را به شما میدهند. اگر یک تابع GROUP BY را مشخص نکنید، این توابع تضمین میکنند که تنها یک ارزش را باز میگردانند.
SELECT
Name,
MAX(Revenue) AS Max_revenue
GROUP BY Genre
این کار، فیلم را با بالاترین درآمد در هر ژانر فیلم، که نام و میزان درآمد آن را نشان میدهد، باز میگرداند.
تابع COUNT() تعداد ردیفهای حاضر در هر شرایطی که در تابع خود مشخص میکنید را حساب میکند. به یاد داشته باشید، این متفاوت از SUM () است که در واقع مقادیر را در ستونی که مشخص میکنید اضافه میکند.
SELECT
Name,
SUM(Revenue) AS Total_revenue,
COUNT(*) AS Times_played
FROM Movies
GROUP BY Name
بیایید با استفاده از این مثال به تفاوت میان SUM () و COUNT () نگاهی بیندازیم. در اینجا، تابع SUM (Revenue) تمام درآمد کسبشده توسط هر فیلم را جمع خواهد کرد ( به نام تابع GROUP BY توجه کنید). در مقابل، COUNT (*) به سادگی تعداد ردیفها برای هر نام فیلم را شمارش خواهد کرد. شما هم چنین میتوانید COUNT (Revenue) را انجام دهید و همان نتیجه را به دست آورید اما شمارش تمام ردیفها به جای درآمد معنی بیشتری دارد.
تابع AVG () کار شما را در زمان محاسبه ستون میانگین یک گروه خاص بسیار آسانتر میکند. این کار اساسا همان کار را با SUM (Revenue) / COUNT (Revenue) انجام میدهد، زیرا میانگین تنها مبلغی است که توسط count تقسیم میشود.
SELECT
date_played,
AVG(revenue)
FROM Movies
GROUP BY date_played
این به شما درآمد متوسطی را میدهد که تئاتر بین تمام فیلمهای خود برای هر تاریخی که باز بوده و فیلم را نمایش میداده، ایجاد کرده است.
مطالعه مقاله اول مرغ بوده یا تخممرغ؟ مشکل اول کار یا سابقه کار برای دانشمندان مشتاق داده!توصیه میشود.
توابع سابکوئریها (Subqueries)
این یکی احتمالا بیشتر از بقیه به تمرین نیاز دارد. بسیاری از اوقات شرکتها از شما میخواهند تا مشکلی را حل کنید که به راحتی با چندین جدول و تنها با یک سابکوئری قابلحل است.
یک راه خوب برای تمرین این است که ابتدا این مشکل را با سادهترین راه ممکن، و شاید با چند جدول حل کنید. هنگامی که پاسخ صحیح را دریافت کردید، سعی کنید کد خود را دوباره فاکتور کنید تا بتوانید آن را با استفاده از یک سابکوئری به جای چند جدول حل کنید.
بیایید دقیقا ببینیم این چگونه است:
اصل کد:
WITH MarchMovies AS (
SELECT
movie,
genre,
date_played
FROM Movies
WHERE date_played BETWEEN '03-01-2018' AND '03-31-2018'
),MayMovies AS (
SELECT
movie,
genre,
date_played
FROM Movies
WHERE date_played BETWEEN '05-01-2018' AND '05-31-2018'
)SELECT
MayMovies.movie
FROM MayMovies
INNER JOIN MarchMovies
ON MayMovies.movie = MarchMovies.movie
در اینجا ما همه فیلمهایی که در ماه مارس و همه فیلمهایی که در ماه می اجرا شده بودند را پیدا کردیم و با استفاده از یک INNER join در عنوان فیلم پیوند میدهیم تا فقط فیلمهایی را که هر دو ماه اجرا شده بودند را به دست آوریم.
استفاده از یک سابکوئری:
SELECT
movie
FROM Movies
WHERE movie IN (SELECT movie FROM Movies WHERE date_played BETWEEN '03-01-2018' AND '03-31-2018')
AND date_played BETWEEN '05-01-2018' AND '05-31-2018'
در اینجا ما همه عناوین فیلمهای اجرا شده در ماه مارس را با استفاده از WHERE و IN operator پیدا میکنیم. اگر آن عنوان فیلم در جدول موقتی ایجاد شده برای فیلمهای مارس و در ماه می وجود داشته باشد، آن در جدول خروجی نیز خواهد بود.
ممکن است به مطالعه مقاله بهترین راه برای آمادهسازی شغلی در علم داده / یادگیری ماشینی چیست؟ علاقمند باشید.
نتیجهگیری
زمانی که این سه مفهوم اساسی را درک کردید، به تمرین نیاز دارید. هر روز حداقل ۱۵دقیقه وقت صرف امتحان کردن مشکلات جدید کنید. اگر نمیتوانید یکی از آنها را حل کنید، به راهحل نگاه کرده و روز بعد دوباره آن را امتحان کنید. دو مورد LeetCode و HackerRank مشکلات بسیاری را ارائه میدهند که از تمام این مهارتها استفاده میکنند. شما هیچ بهانهای ندارید که برترین مصاحبه SQL خود را ارائه ندهید!
در نهایت، تمرین کنید، تمرین کنید و تمرین کنید!
این متن با استفاده از ربات ترجمه مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه میتواند دارای برخی اشکالات ترجمه باشد.
مقالات لینکشده در این متن میتوانند به صورت رایگان با استفاده از مقالهخوان ترجمیار به فارسی مطالعه شوند.
مطلبی دیگر از این انتشارات
کاربرد ایرپادها بهجای سمعک برای افراد کمشنوا
مطلبی دیگر از این انتشارات
سادهسازی زیرنویسها در نتفلیکس
مطلبی دیگر از این انتشارات
یوتیوب عکس در تصویر را برای آیفونها و آیپدها به ارمغان میآورد.