سوالات رایج از توابع SQL هنگام مصاحبه‌ها

شکل ۱: زبان برنامه‌نویسی SQL
شکل ۱: زبان برنامه‌نویسی SQL


منتشر‌شده در: towardsdatascience به تاریخ 11 فوریه 2021
لینک منبع: Top Skills to Ace Every SQL Interview Question

تقریبا همیشه یک بخش SQL در هر مصاحبه در موقعیت داده محور وجود دارد. چه شما برای یک تحلیلگر، علوم مهندسی، یا نقش علوم داده مصاحبه می‌کنید، SQL همیشه مسیر خود را به بخش کدگذاری فرآیند طی خواهد کرد. هنگامی که چند مفهوم کلیدی را بیاموزید، می‌توانید تقریبا به هر سوالی با تمرین زیاد پاسخ دهید. برای هر یک از این مفاهیم با اصول اولیه شروع کنید و راه خود را به سمت مشکلات سخت‌تر باز کنید.

در اینجا سه مفهوم کلیدی که برای موفقیت در مصاحبه با SQL خود که باید بدانید آورده شده است:

توابع Join

شما مشکلی پیدا نمی‌کنید که شامل یک پیوند نباشد. تفاوت بین یک پیوند معمولی، پیوند درونی/داخلی، و پیوند چپ را بدانید. زمانی که بتوانید بین اینها تمایز قائل شوید و از آن‌ها در سناریوهای مناسب استفاده کنید، شما داوطلب طلایی خواهید بود.

شکل ۲: توابع Join یا پیوند
شکل ۲: توابع 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 خود را ارائه ندهید!

در نهایت، تمرین کنید، تمرین کنید و تمرین کنید!

این متن با استفاده از ربات ترجمه مقاله علم داده ترجمه شده و به صورت محدود مورد بازبینی انسانی قرار گرفته است.در نتیجه می‌تواند دارای برخی اشکالات ترجمه باشد.
مقالات لینک‌شده در این متن می‌توانند به صورت رایگان با استفاده از مقاله‌خوان ترجمیار به فارسی مطالعه شوند.