অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন

উত্স নোড: 1586233

অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

ভূমিকা

 
আপনি যদি একজন অভিজ্ঞ ডেটা সায়েন্টিস্ট হন যে চাকরি খুঁজছেন, আপনি এর চেয়ে ভালো সময় বাছাই করতে পারতেন না। এই মুহুর্তে, অনেক প্রতিষ্ঠিত সংস্থা ডেটা বিজ্ঞানীদের সন্ধান করছে যারা তাদের নৈপুণ্য ভিতরে এবং বাইরে জানে। যাইহোক, উচ্চ চাহিদার অর্থ এই নয় যে আপনি হুপস এর মধ্য দিয়ে লাফিয়ে উঠতে পারেন এবং একটি নির্দিষ্ট দক্ষতা সেট ছাড়াই সিনিয়র পদের জন্য আবেদন করতে পারেন। অভিজ্ঞ ডেটা বিজ্ঞানীদের নিয়োগ করার সময়, কোম্পানিগুলি তাদের কাছে সবচেয়ে কঠিন কাজগুলিতে কাজ করার আশা করে। এই কর্মচারীদের এমনকি সবচেয়ে অস্পষ্ট বৈশিষ্ট্যগুলির একটি ভাল উপলব্ধি থাকা উচিত যাতে তারা প্রয়োজনে সেগুলি ব্যবহার করতে পারে।

এটা আশ্চর্যজনক হওয়া উচিত নয় যে সিনিয়র পদের জন্য সাক্ষাত্কার নেওয়ার সময়, অভিজ্ঞ ডেটা বিজ্ঞানীরা অনেক কঠিন প্রশ্ন জিজ্ঞাসা করতে থাকে। প্রায়শই, যখন কয়েক বছর ধরে একটি একক কাজের উপর কাজ করে, ডেটা বিজ্ঞানীরা নির্দিষ্ট পুনরাবৃত্তিমূলক কাজগুলি সম্পাদন করতে খুব দক্ষ হয়ে ওঠেন। পেশাদারদের জন্য এটি উপলব্ধি করা অপরিহার্য যে SQL তাদের বিদ্যমান জ্ঞানের সাথে থামে না এবং শেষ হয় না। যখন এটি উন্নত SQL ধারণার কথা আসে, তখনও তাদের জ্ঞানে কিছু ফাঁক থাকতে পারে। তাই আপনার ডেটা সায়েন্টিস্ট ইন্টারভিউতে সফল হওয়ার জন্য সাহায্য পেতে কষ্ট হয় না। 

এসকিউএল হল ডাটাবেস পরিচালনার জন্য প্রাথমিক ভাষা, তাই এসকিউএল ক্রিয়াকলাপগুলি ডেটা বিজ্ঞানীদের কাজের কেন্দ্রবিন্দুতে রয়েছে। বেশিরভাগ ডেটা সায়েন্টিস্ট সাক্ষাতকারগুলি এসকিউএল সম্পর্কে প্রার্থীর জ্ঞান নির্ধারণের জন্য সাজানো হয়। 

দৈনন্দিন কাজের মধ্যে জটিল প্রশ্নগুলি লেখার অন্তর্ভুক্ত নাও হতে পারে, কিন্তু আপনাকে অবশ্যই দেখাতে হবে যে যদি এই ধরনের দক্ষতার প্রয়োজন হয়, আপনি এটি করতে সক্ষম ব্যক্তি। সুতরাং এটা আশ্চর্যজনক হওয়া উচিত নয় যে ইন্টারভিউয়াররা বিভিন্ন ধরনের সেট জিজ্ঞাসা করে এসকিউএল ইন্টারভিউ প্রশ্ন এসকিউএল-এ প্রার্থীর সাবলীলতা পরীক্ষা করতে।

এই নিবন্ধে, আমরা অভিজ্ঞ পেশাদারদের সাথে সাক্ষাত্কারে জিজ্ঞাসা করা জটিল প্রশ্ন এবং ধারণাগুলির সংক্ষিপ্তসার করতে চেয়েছিলাম। এমনকি যদি আপনি আপনার SQL জ্ঞানে আত্মবিশ্বাসী হন, তবে কীওয়ার্ড স্ক্যান করতে এবং আপনি সবকিছু কভার করেছেন তা নিশ্চিত করতে এটি ক্ষতি করে না।

অভিজ্ঞ পেশাদারদের জন্য বেয়ার ন্যূনতম ধারণা

কেস / কখন

 
এসকিউএল-এর সম্পূর্ণ আয়ত্ত অর্জনের জন্য CASE (এবং এর সাথে যুক্ত যখন স্টেটমেন্ট) ধারণাটি পুঙ্খানুপুঙ্খভাবে বোঝা অপরিহার্য। একটি কেস স্টেটমেন্ট আমাদেরকে নির্দিষ্ট শর্তগুলি পরীক্ষা করতে এবং সেই শর্তগুলিকে সত্য বা মিথ্যা হিসাবে মূল্যায়ন করার উপর ভিত্তি করে একটি মান ফেরত দেওয়ার অনুমতি দেয়। WHERE এবং ORDER BY-এর মতো ধারাগুলির সংমিশ্রণে, CASE আমাদের এসকিউএল কোয়েরিতে যুক্তি, শর্ত এবং অর্ডার আনতে দেয়।

CASE বিবৃতিগুলির মান আমাদের প্রশ্নগুলিতে একটি সাধারণ শর্তযুক্ত যুক্তি প্রদানের মধ্যে সীমাবদ্ধ নয়। অভিজ্ঞ ডেটা বিজ্ঞানীদের CASE স্টেটমেন্ট এবং এর ব্যবহার সম্পর্কে পৃষ্ঠ-স্তরের বোঝার চেয়ে বেশি হওয়া উচিত। সাক্ষাত্কারকারীরা সম্ভবত আপনাকে বিভিন্ন ধরণের CASE অভিব্যক্তি এবং সেগুলি কীভাবে লিখতে হয় সে সম্পর্কে প্রশ্ন জিজ্ঞাসা করবে। 

অভিজ্ঞ প্রার্থীদের তাত্ত্বিক প্রশ্নের উত্তর দেওয়ার জন্য প্রস্তুত থাকতে হবে, যেমন মূল্যবান এবং অনুসন্ধান করা CASE বিবৃতির মধ্যে পার্থক্য ব্যাখ্যা করা, তারা কীভাবে কাজ করে এবং কীভাবে সেগুলি লিখতে হয়। এর জন্য তাদের সিনট্যাক্স এবং সাধারণ অনুশীলনগুলির একটি শক্তিশালী বোঝার প্রয়োজন। বলা বাহুল্য, এর মধ্যে ELSE ধারার যথাযথ ব্যবহারও অন্তর্ভুক্ত।

অভিজ্ঞ ডেটা সায়েন্টিস্টদের কাছ থেকে আশা করা হবে যে কীভাবে CASE-কে সামগ্রিক ফাংশন সহ ব্যবহার করতে হয়। আপনাকে একটি সংক্ষিপ্ত CASE বিবৃতি লিখতে বলা হতে পারে, যা কম পুনরাবৃত্তিমূলক এবং বোঝা সহজ। শর্টহ্যান্ড CASE স্টেটমেন্ট ব্যবহার করে সতর্কতা এবং সম্ভাব্য ঝুঁকি সম্পর্কে আপনার বুদ্ধিমানের সাথে কথা বলতে সক্ষম হওয়া উচিত।

সাধারণভাবে, একজন অভিজ্ঞ ডেটা সায়েন্টিস্টকে আরও দক্ষ প্রশ্ন লিখতে CASE ব্যবহার করতে সক্ষম হতে হবে। সর্বোপরি, CASE স্টেটমেন্টের সম্পূর্ণ উদ্দেশ্য হল ডেটা একত্রিত করার জন্য অনেকগুলি পৃথক প্রশ্ন লেখা এড়ানো।

CASE/WHEN স্টেটমেন্ট ব্যবহার করে সমাধান করা যেতে পারে এমন প্রশ্নের একটি উদাহরণ এখানে দেওয়া হল: https://platform.stratascratch.com/coding/9634-host-response-rates-with-cleaning-fees?python= 

এটি একটি কঠিন প্রশ্ন যা Airbnb সাক্ষাত্কারে জিজ্ঞাসা করা হয়, যেখানে প্রার্থীদের গড় হোস্ট রেসপন্স রেট, জিপ কোড এবং এর সংশ্লিষ্ট ক্লিনিং ফি খুঁজে বের করতে হবে।

এই ক্ষেত্রে, CASE/WHEN বিবৃতিটি জিপ কোড ছাড়াও ফলাফলটিকে একটি সংখ্যা হিসাবে ফর্ম্যাট করতে এবং এটিকে শতাংশের মান হিসাবে উপস্থাপন করতে ব্যবহৃত হয়।

এসকিউএল যোগদান করে

 
SQL যোগদান সম্পর্কে আপনার জ্ঞানে আত্মবিশ্বাসী বোধ করা সহজ, কিন্তু আপনি যত বেশি এই বিষয়টি অন্বেষণ করবেন, ততই আপনি আবিষ্কার করবেন যে আপনি জানেন না। ইন্টারভিউয়াররা প্রায়ই জিজ্ঞেস করে SQL যোগদানের উন্নত দিক সম্পর্কে সাক্ষাত্কারের প্রশ্ন যেগুলো প্রায়ই উপেক্ষা করা হয়। তাই এই ধারণাটি গভীরভাবে আবিষ্কার করা এবং এটি পুঙ্খানুপুঙ্খভাবে আয়ত্ত করা গুরুত্বপূর্ণ।
 
মৌলিক ধারণার পাশাপাশি, ইন্টারভিউয়াররা স্ব-ক্রস যোগদান কী তা জিজ্ঞাসা করতে পারে এবং ব্যবহারিক প্রশ্নগুলি সমাধান করার জন্য জিজ্ঞাসা করে আপনার জ্ঞানের গভীরতা খুঁজে বের করতে পারে। হ্যাশ যোগদান বা যৌগিক যোগদানের মতো জটিল প্রকারগুলি সহ আপনার বিভিন্ন ধরণের যোগদান সম্পর্কে জানা উচিত। প্রাকৃতিক যোগগুলি কী এবং কখন সেগুলি সবচেয়ে দরকারী তা আপনাকে ব্যাখ্যা করতেও বলা যেতে পারে। কখনও কখনও আপনাকে প্রাকৃতিক এবং অভ্যন্তরীণ যোগদানের মধ্যে পার্থক্য ব্যাখ্যা করতে হবে।
 
আপনার, সাধারণভাবে, কাঙ্ক্ষিত ফলাফল অর্জনের জন্য অন্যান্য বিবৃতির সাথে যোগদান ব্যবহার করার একটি পুঙ্খানুপুঙ্খ অভিজ্ঞতা এবং দক্ষতা থাকা উচিত। উদাহরণস্বরূপ, আপনার জানা উচিত কিভাবে ক্রস জয়েন ব্যবহার করার জন্য WHERE ক্লজটি ব্যবহার করতে হয় যেন এটি একটি অভ্যন্তরীণ যোগদান। সার্ভারে অত্যধিক চাপ না দিয়ে নতুন টেবিল তৈরি করতে কীভাবে জয়েন ব্যবহার করতে হয় তাও আপনি জানতে পারবেন। অথবা ডাটাবেস অনুসন্ধান করার সময় অনুপস্থিত মানগুলি সনাক্ত করতে এবং পূরণ করতে বাইরের যোগদানগুলি কীভাবে ব্যবহার করবেন। বা বাইরের যোগদানের অভ্যন্তরীণ কাজ, যেমন তাদের ক্রম পুনর্বিন্যাস আউটপুট পরিবর্তন করতে পারে। 

এখানে একটি অভ্যন্তরীণ যৌথ বিবৃতি লেখার সাথে জড়িত প্রশ্নের একটি উদাহরণ

এটি একটি মোটামুটি কঠিন প্রশ্ন, যেখানে প্রার্থীদের মোট ব্যয়ের শতাংশ হিসাবে অর্ডারের আকার প্রদর্শন করতে বলা হয়।
 
 

উন্নত ধারণা N1: তারিখ-সময় ম্যানিপুলেশন

 
অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

ডেটাবেসগুলিতে তারিখ এবং সময়গুলি অন্তর্ভুক্ত করা সাধারণ, তাই যে কোনও অভিজ্ঞ ডেটা বিজ্ঞানীর তাদের সাথে কাজ করার গভীর জ্ঞান থাকা উচিত। এই ধরণের ডেটা আমাদের ঘটনাগুলি ঘটতে, ফ্রিকোয়েন্সিতে পরিবর্তন, ব্যবধান গণনা এবং অন্যান্য গুরুত্বপূর্ণ অন্তর্দৃষ্টি অর্জনের ক্রম ট্র্যাক করতে দেয়। অনেক সময় এই ক্রিয়াকলাপগুলি সম্পাদন করার জন্য SQL এ তারিখ-সময় ম্যানিপুলেশনের সম্পূর্ণ দক্ষতার প্রয়োজন হয়। সুতরাং এই জাতীয় দক্ষতার সেট সহ পেশাদাররা প্রতিযোগী প্রার্থীদের তুলনায় একটি সুবিধা পেতে চলেছে। আপনি যদি আপনার দক্ষতার প্রতি 100% আত্মবিশ্বাসী না হন তবে নীচে বর্ণিত ধারণাগুলি দেখুন এবং দেখুন তাদের মধ্যে কতগুলি পরিচিত শোনাচ্ছে৷

যেহেতু এসকিউএল-এ ডেটা ফর্ম্যাট করার জন্য অনেকগুলি ভিন্ন (কিন্তু বৈধ) পন্থা রয়েছে, তাই দুর্দান্ত কোডারদের তাদের সবার সাথে অন্তত পরিচিত হওয়া উচিত। সাক্ষাত্কারের সময়, নিয়োগকারী পরিচালকরা প্রাথমিক ডেটা ফর্ম্যাটিং ধারণাগুলির জ্ঞান এবং কাজের জন্য সঠিক ফাংশন বেছে নেওয়ার বিষয়ে বুদ্ধিমানের সাথে কথা বলার ক্ষমতা আশা করেন। এর মধ্যে একটি গুরুত্বপূর্ণ FORMAT() ফাংশনের জ্ঞান এবং ফাংশনের সম্পূর্ণ ব্যবহার করার জন্য সংশ্লিষ্ট সিনট্যাক্স অন্তর্ভুক্ত রয়েছে। অন্যান্য মৌলিক ফাংশন সম্পর্কে জ্ঞান যেমন NOW() এছাড়াও প্রত্যাশিত. এছাড়াও, অভিজ্ঞ পেশাদারদের টাইম-সিরিজ ডেটা এবং এর উদ্দেশ্যের মতো মৌলিক ধারণাগুলি সম্পর্কে জিজ্ঞাসা করা নীলের বাইরে হবে না।

আপনি যে কাজের জন্য আবেদন করছেন তার প্রেক্ষাপট বিবেচনা করাও গুরুত্বপূর্ণ। একটি AI বা IoT কোম্পানি সেন্সর থেকে সংগৃহীত ডেটা ট্র্যাক করার বিষয়ে আরও বেশি উদ্বিগ্ন হবে, যেখানে একটি স্টক ট্রেডিং অ্যাপের জন্য আপনাকে দিন, সপ্তাহ বা মাসে মূল্যের ওঠানামা ট্র্যাক করতে হতে পারে।

কিছু ক্ষেত্রে, নিয়োগকর্তারা SQL-এ আরও উন্নত তারিখ/সময় ফাংশন সম্পর্কে জিজ্ঞাসা করতে পারেন, যেমন CAST(), EXTRACT(), বা DATE_TRUNC()৷ এই ফাংশনগুলি অমূল্য হতে পারে যখন আপনি প্রচুর পরিমাণে ডেটা নিয়ে কাজ করছেন যাতে তারিখ রয়েছে৷ একজন অভিজ্ঞ ডেটা সায়েন্টিস্টের প্রতিটি ফাংশনের উদ্দেশ্য এবং এর প্রয়োগগুলি জানা উচিত। একটি আদর্শ পরিস্থিতিতে, তার অতীতে সেগুলি ব্যবহার করার অভিজ্ঞতা থাকতে হবে।

এসকিউএল-এর সবচেয়ে জটিল তারিখ-সময় ম্যানিপুলেশনটি মৌলিক এবং উন্নত ফাংশনগুলির সংমিশ্রণকে জড়িত করতে চলেছে। তাই আরও মৌলিক FORMAT(), NOW(),CURRENT_DATE, এবং CURRENT_TIME থেকে শুরু করে এবং উপরে উল্লিখিত আরও উন্নত ফাংশন সহ তাদের সকলকে জানা প্রয়োজন। একজন অভিজ্ঞ ডেটা সায়েন্টিস্ট হিসেবে, আপনারও জানা উচিত INTERVAL কী করে এবং কখন এটি ব্যবহার করতে হবে।

Airbnb সাক্ষাত্কারে জিজ্ঞাসা করা একটি প্রশ্নের উদাহরণ এখানে, যেখানে প্রার্থীদের অবশ্যই Airbnb-এর বৃদ্ধি ট্র্যাক করতে উপলব্ধ ডেটা ব্যবহার করতে হবে।
 
 

ভিত্তি:

 
এই প্রশ্নে, প্রার্থীদের প্রতি বছর সাইন আপ করা হোস্টের সংখ্যার পরিবর্তনের উপর ভিত্তি করে Airbnb-এর বৃদ্ধি ট্র্যাক করতে বলা হয়। অন্য কথায়, আমরা প্রতি বছরের বৃদ্ধির সূচক হিসাবে নতুন নিবন্ধিত হোস্টের সংখ্যা ব্যবহার করব। আমরা গত এবং বর্তমান বছরের মধ্যে হোস্টের সংখ্যার পার্থক্য গণনা করে এবং সেই সংখ্যাটিকে আগের বছরে নিবন্ধিত হোস্টের সংখ্যা দ্বারা ভাগ করে বৃদ্ধির হার খুঁজে পাব। তারপরে আমরা ফলাফলটিকে 100 দ্বারা গুণ করে শতাংশের মান খুঁজে পাব।

আউটপুট টেবিলে কলাম এবং বর্তমান বছরে, পূর্ববর্তী বছরে হোস্টের সংখ্যা এবং বছর থেকে বছরে বৃদ্ধির শতাংশের জন্য সংশ্লিষ্ট ডেটা থাকা উচিত। শতাংশকে অবশ্যই নিকটতম পূর্ণ সংখ্যায় বৃত্তাকার করতে হবে এবং বছরের উপর নির্ভর করে সারিগুলিকে ক্রমবর্ধমান ক্রমানুসারে সাজাতে হবে।
 
 

সমাধান:

 
এই প্রশ্নের উত্তর দেওয়ার জন্য, একজন প্রার্থীকে 'airbnb_search_details' নামক টেবিলের সাথে কাজ করতে হবে, যাতে অনেকগুলি কলাম রয়েছে। আমাদের যে কলামটি প্রয়োজন সেটি 'হোস্ট_সেনস' লেবেলযুক্ত, যা বছর, মাস এবং যেদিন হোস্ট প্রথম ওয়েবসাইটে সাইন আপ করেছিল তা নির্দেশ করে৷ এই অনুশীলনের জন্য, মাস এবং দিনটি অপ্রাসঙ্গিক, তাই আমাদের প্রথমে যা করতে হবে তা হল মান থেকে বছর বের করা। তারপরে আমাদের একটি ভিউ তৈরি করতে হবে যাতে বর্তমান বছর, পূর্ববর্তী বছর এবং সেই বছরের হোস্টের মোট সংখ্যার জন্য আলাদা কলাম অন্তর্ভুক্ত থাকে। 

Select       extract(year FROM host_since::DATE) FROM airbnb_search_details WHERE host_since IS NOT NULL

এখন পর্যন্ত, আমরা দুটি জিনিস করেছি:

  1. আমরা নিশ্চিত করেছি যে শুধুমাত্র সেই সারিগুলি অন্তর্ভুক্ত করা হবে যেখানে হোস্ট_সিস কলামটি খালি নেই।
  2. আমরা ডেটা থেকে বছর বের করেছি এবং এটিকে DATE মান হিসেবে নিক্ষেপ করেছি।
Select       extract(year FROM host_since::DATE)       count(id) as current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY year asc

তারপরে আমরা আইডি গণনা করতে এগিয়ে যাই এবং প্রতি বছরের জন্য গ্রুপ বাই ক্লজ সেট আপ করি। এবং এটিকে আরোহী ক্রমে প্রদর্শন করুন। 

এটি আমাদের দুটি কলাম সহ একটি টেবিল দেওয়া উচিত: বছর, এবং সেই বছর নিবন্ধিত হোস্টের সংখ্যা। প্রশ্নটি সমাধান করার জন্য আমাদের কাছে এখনও একটি সম্পূর্ণ ছবি নেই, তবে এটি সঠিক দিকের একটি পদক্ষেপ। পূর্ববর্তী বছরে সাইন আপ করা হোস্টদের জন্য আমাদের আলাদা কলামেরও প্রয়োজন। এখানেই LAG() ফাংশন আসে।

SELECT       Year,       current_year_host,       LAG(current_year_host, 1) OVER (ORDER BY year) as prev_year_host Select       extract(year FROM host_since::DATE)       count(id) as current_year_host FROM airbnb_search_details WHERE host_since IS NOT NULL GROUP BY extract(year FROM host_since::DATE) ORDER BY year asc

এখানে, আমরা তৃতীয় কলাম যোগ করেছি, যেটিকে 'prev_year_host' লেবেল করা হবে এবং এর মানগুলি 'current_year_host' থেকে আসবে, এক সারির বিলম্ব ছাড়া। এটি দেখতে কেমন হতে পারে তা এখানে:

অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

এইভাবে টেবিল সাজানো চূড়ান্ত বৃদ্ধির হার গণনা করা খুব সুবিধাজনক করে তোলে। সমীকরণের প্রতিটি মানের জন্য আমাদের একটি পৃথক কলাম রয়েছে। শেষ পর্যন্ত, আমাদের কোডটি এইরকম দেখতে হবে:

SELECT year,       current_year_host,       prev_year_host,       round(((current_year_host - prev_year_host)/(cast(prev_year_host AS numeric)))*100) estimated_growth FROM   (SELECT year,           current_year_host,           LAG(current_year_host, 1) OVER (ORDER BY year) AS prev_year_host   FROM     (SELECT extract(year                     FROM host_since::date) AS year,             count(id) current_year_host       FROM airbnb_search_details       WHERE host_since IS NOT NULL       GROUP BY extract(year                       FROM host_since::date)       ORDER BY year) t1) t2

এখানে, আমরা আরেকটি প্রশ্ন এবং আরেকটি কলাম যোগ করি যেখানে আমরা বৃদ্ধির হার গণনা করি। আমাদের অবশ্যই প্রাথমিক ফলাফলকে 100 দ্বারা গুণ করতে হবে এবং টাস্কের প্রয়োজনীয়তাগুলি পূরণ করতে এটিকে বৃত্তাকার করতে হবে। 

এটাই এই কাজের সমাধান। এটা স্পষ্ট যে তারিখ-সময় ম্যানিপুলেশন ফাংশন টাস্ক সম্পূর্ণ করার জন্য অপরিহার্য ছিল। 
 
 

উন্নত ধারণা N2: উইন্ডো ফাংশন এবং পার্টিশন

 
অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

SQL উইন্ডো ফাংশন জটিল, তবুও দক্ষ SQL কোয়েরি লেখার জন্য সবচেয়ে গুরুত্বপূর্ণ ধারণাগুলির মধ্যে একটি। অভিজ্ঞ পেশাদারদের উইন্ডো ফাংশনগুলির একটি গভীর ব্যবহারিক এবং তাত্ত্বিক জ্ঞান থাকবে বলে আশা করা হয়। এর মধ্যে ওভার ক্লজ কী তা জানা এবং এর ব্যবহার আয়ত্ত করা অন্তর্ভুক্ত। সাক্ষাত্কারকারীরা জিজ্ঞাসা করতে পারে কিভাবে ওভার ক্লজ সমষ্টিগত ফাংশনগুলিকে উইন্ডো ফাংশনে পরিণত করতে পারে। উইন্ডো ফাংশন হিসাবে ব্যবহার করা যেতে পারে এমন তিনটি সমষ্টিগত ফাংশন সম্পর্কে আপনাকে জিজ্ঞাসা করা হতে পারে। অভিজ্ঞ ডেটা বিজ্ঞানীদের অন্যান্য, অ-সমষ্টি উইন্ডো ফাংশন সম্পর্কেও সচেতন হওয়া উচিত।

উইন্ডো ফাংশনগুলির সর্বোত্তম ব্যবহার করার জন্য, একজনকে অবশ্যই জানতে হবে যে পার্টিশন বাই ক্লজটি কী এবং এটি কীভাবে ব্যবহার করতে হয়। আপনাকে এটি ব্যাখ্যা করতে এবং কয়েকটি ব্যবহারের ক্ষেত্রে উদাহরণ প্রদান করতে বলা হতে পারে। কখনও কখনও আপনাকে ORDER_BY ক্লজ ব্যবহার করে পার্টিশনের মধ্যে সারিগুলি সংগঠিত করতে হবে৷

যে প্রার্থীরা প্রত্যেকটি পৃথক উইন্ডো ফাংশন সম্পর্কে পুঙ্খানুপুঙ্খ জ্ঞান প্রদর্শন করতে পারে, যেমন ROW_NUMBER() তাদের একটি সুবিধা থাকবে। বলা বাহুল্য, শুধুমাত্র তাত্ত্বিক জ্ঞানই যথেষ্ট নয় - পেশাদারদেরও পার্টিশন সহ বা ছাড়াই অনুশীলনে সেগুলি ব্যবহারের অভিজ্ঞতা থাকতে হবে। উদাহরণস্বরূপ, একজন অভিজ্ঞ পেশাদারকে RANK() এবং DENSE_RANK() এর মধ্যে পার্থক্য ব্যাখ্যা করতে সক্ষম হওয়া উচিত। একজন আদর্শ প্রার্থীর কিছু অত্যাধুনিক ধারণা জানা উচিত, যেমন পার্টিশনের মধ্যে ফ্রেম, এবং সেগুলি স্পষ্টভাবে ব্যাখ্যা করতে সক্ষম হওয়া উচিত।

মহান প্রার্থীদের NTH_VALUE() ফাংশনের ব্যবহার ব্যাখ্যা করা উচিত। এই ফাংশনের বিকল্পগুলি যেমন FIRST_VALUE() এবং LAST_VALUE() ফাংশনগুলি উল্লেখ করা ক্ষতিকর হবে না৷ কোম্পানিগুলি প্রায়শই কোয়ার্টাইল, কোয়ান্টাইল এবং সাধারণভাবে শতাংশ পরিমাপ করতে পছন্দ করে। এই ক্রিয়াকলাপটি সম্পাদন করার জন্য, ডেটা বিজ্ঞানীদের অবশ্যই NTILE() উইন্ডো ফাংশনটি কীভাবে ব্যবহার করতে হয় তা অবশ্যই জানতে হবে।

এসকিউএল-এ, সাধারণত একটি কাজের কাছে যাওয়ার অনেক উপায় রয়েছে। এখনও, উইন্ডো ফাংশন সাধারণ, কিন্তু জটিল অপারেশন সম্পাদন করার সবচেয়ে সহজ উপায় প্রদান করে। এই ধরনের একটি উইন্ডো ফাংশনের একটি ভাল উদাহরণ হল LAG() বা LEAD(), তাই আপনার তাদের সাথেও পরিচিত হওয়া উচিত। উদাহরণস্বরূপ, আসুন একটি কঠিন Airbnb ইন্টারভিউ প্রশ্নের পূর্ববর্তী সমাধান থেকে একটি উদাহরণ দেখি:

আগের বছরের হোস্টের সংখ্যা প্রদর্শন করতে, আমরা OVER স্টেটমেন্টের সাথে LAG() ফাংশন ব্যবহার করেছি। এটি অন্য অনেক উপায়ে করা যেত, তবে উইন্ডো ফাংশনগুলি আমাদেরকে এসকিউএল কোডের মাত্র একটি লাইনে পছন্দসই ফলাফল পেতে দেয়:

পূর্ববর্তী_বছর_হোস্ট হিসাবে LAG(বর্তমান_বছর_হোস্ট, 1) ওভার (বছর অনুসারে)

অনেক কোম্পানির একটি নির্দিষ্ট সময়ের মধ্যে বৃদ্ধি গণনা করতে হবে। LAG() ফাংশন এই ধরনের অ্যাসাইনমেন্ট সম্পূর্ণ করার জন্য অমূল্য হতে পারে।
 
 

উন্নত ধারণা N3: মাসে মাসে বৃদ্ধি

 
অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

অনেক প্রতিষ্ঠান তাদের নিজস্ব কর্মক্ষমতা পরিমাপ করার জন্য ডেটা বিশ্লেষণ ব্যবহার করে। এটি একটি নির্দিষ্ট বিনিয়োগে বিপণন প্রচারণা বা ROI এর কার্যকারিতা পরিমাপ করতে পারে। এই ধরনের বিশ্লেষণ সম্পাদনের জন্য SQL এর গভীর জ্ঞানের প্রয়োজন, যেমন তারিখ, সময় এবং উইন্ডো ফাংশন।

ডেটা সায়েন্টিস্টদেরও ডেটা ফরম্যাটিং এবং শতাংশ হিসাবে বা অন্য কোনও আকারে দেখানোর ক্ষেত্রে তাদের দক্ষতা প্রমাণ করতে হবে। সাধারণভাবে, ব্যবহারিক প্রশ্নগুলি সমাধান করতে যেখানে আপনাকে মাসে-মাসের বৃদ্ধি গণনা করতে হবে, আপনাকে অবশ্যই একাধিক দক্ষতা সেটের সমন্বয় ব্যবহার করতে হবে। কিছু প্রয়োজনীয় ধারণা উন্নত হবে (উইন্ডো ফাংশন, ডেট-টাইম ম্যানিপুলেশন), অন্যগুলো হবে মৌলিক (সমষ্টিগত ফাংশন এবং সাধারণ SQL স্টেটমেন্ট)।

আমাজনে ইন্টারভিউয়ারদের জিজ্ঞাসা করা একটি উদাহরণের প্রশ্ন দেখা যাক।

ভিত্তি:

 
এই প্রশ্নে, আমাদের ক্রয়ের একটি টেবিলের সাথে কাজ করতে হবে এবং মাসিক বৃদ্ধি বা রাজস্ব হ্রাস গণনা করতে হবে। শেষ ফলাফল অবশ্যই একটি নির্দিষ্ট উপায়ে ফর্ম্যাট করা উচিত (YYYY-MM ফর্ম্যাট) এবং শতাংশগুলি দ্বিতীয় নিকটতম দশমিকে বৃত্তাকার হওয়া উচিত। 

সমাধান:

 
এই ধরনের কাজ করার সময়, আপনাকে প্রথমে টেবিলটি বুঝতে হবে। প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে যে কলামগুলির সাথে কাজ করতে হবে তাও চিহ্নিত করতে হবে। এবং আপনার আউটপুট কেমন দেখতে যাচ্ছে.

আমাদের উদাহরণে, ডেটা মানগুলির অবজেক্টের ধরন রয়েছে, তাই আমাদেরকে CAST() ফাংশনটি তারিখের প্রকারে রূপান্তর করতে হবে।

SELECT   to_char(cast(created_at as date), 'YYYY-MM') FROM sf_transactions

প্রশ্নটি তারিখগুলির জন্য একটি বিন্যাসও নির্দিষ্ট করে, তাই আমরা এই বিন্যাসে তারিখটি আউটপুট করতে SQL এ TO_CHAR() ফাংশন ব্যবহার করতে পারি।

বৃদ্ধি গণনা করতে, সেই তারিখের জন্য মোট বিক্রয়ের পরিমাণ পেতে আমাদের create_at এবং SUM() সমষ্টিগত ফাংশন নির্বাচন করা উচিত। 

SELECT   to_char(cast(created_at as date), 'YYYY-MM'),   created_at,   sum(value) FROM sf_transactions

এই সময়ে, আমাদের আবার উইন্ডো ফাংশন ব্যবহার করতে হবে। বিশেষ করে, আমরা গত মাসের ভলিউম অ্যাক্সেস করতে এবং এটি একটি পৃথক কলাম হিসাবে প্রদর্শন করতে LAG() ফাংশন ব্যবহার করতে যাচ্ছি। এর জন্য, আমাদের একটি ওভার ক্লজও লাগবে।

SELECT   to_char(cast(created_at as date), 'YYYY-MM') AS year_month,   created_at,   sum(value)   lag(sum(value), 1) OVER (ORDER BY created_at::date) FROM sf_transactions GROUP BY created_at

আমরা এখন পর্যন্ত যে কোডটি লিখেছি তার উপর ভিত্তি করে, আমাদের টেবিলটি এরকম কিছু দেখাবে:

অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

এখানে, আমাদের যোগফল কলামে তারিখ এবং সংশ্লিষ্ট মোট মান এবং ল্যাগ কলামে শেষ তারিখের মান রয়েছে। এখন আমরা ফর্মুলায় মানগুলি প্লাগ করতে পারি এবং একটি পৃথক কলামে বৃদ্ধির হার প্রদর্শন করতে পারি।

আমাদের অপ্রয়োজনীয় create_at কলামটিও সরিয়ে দেওয়া উচিত এবং GROUP BY এবং ORDER BY ধারাগুলিকে year_month-এ পরিবর্তন করা উচিত।

SELECT   to_char(cast(created_at as date), 'YYYY-MM') AS year_month,   sum(value),   lag(sum(value), 1) OVER (ORDER BY to_char(cast(created_at as date)) FROM sf_transactions GROUP BY year_month

আমরা কোড চালানোর পরে, আমাদের টেবিলে শুধুমাত্র আমাদের গণনার জন্য প্রয়োজনীয় কলামগুলি অন্তর্ভুক্ত করা উচিত।

অভিজ্ঞ পেশাদারদের জন্য এসকিউএল ইন্টারভিউ প্রশ্ন
 

এখন আমরা অবশেষে সমাধানে পৌঁছাতে পারি। এখানে চূড়ান্ত কোড দেখতে কেমন হবে:

SELECT to_char(created_at::date, 'YYYY-MM') AS year_month,       round(((sum(value) - lag(sum(value), 1) OVER w) / (lag(sum(value), 1) OVER w)) * 100, 2) AS revenue_diff_pct FROM sf_transactions GROUP BY year_month WINDOW w AS (         ORDER BY to_char(created_at::date, 'YYYY-MM')) ORDER BY year_month ASC


 

এই কোডে, আমরা আগের উদাহরণ থেকে দুটি কলামের মান নিই এবং তাদের মধ্যে পার্থক্য গণনা করি। মনে রাখবেন যে আমরা আমাদের কোডের পুনরাবৃত্তি কমাতে উইন্ডো উপনাম ব্যবহার করি।

তারপর, অ্যালগরিদম অনুসারে, আমরা এটিকে বর্তমান মাসের আয় দ্বারা ভাগ করি এবং শতাংশের মান পেতে এটিকে 100 দ্বারা গুণ করি। অবশেষে, আমরা শতাংশের মানকে দুই দশমিক বিন্দুতে বৃত্তাকার করি। আমরা এমন উত্তরে পৌঁছাই যা কাজের সমস্ত প্রয়োজনীয়তা পূরণ করে। 

উন্নত ধারণা N4: মন্থন হার

 
যদিও এটি বৃদ্ধির বিপরীত, মন্থনও একটি গুরুত্বপূর্ণ মেট্রিক। অনেক কোম্পানি তাদের মন্থন হার ট্র্যাক রাখে, বিশেষ করে যদি তাদের ব্যবসার মডেল সাবস্ক্রিপশন-ভিত্তিক হয়। এইভাবে, তারা হারানো সাবস্ক্রিপশন বা অ্যাকাউন্টের সংখ্যা ট্র্যাক করতে পারে এবং এর কারণগুলির পূর্বাভাস দিতে পারে৷ একজন অভিজ্ঞ ডেটা সায়েন্টিস্টের কাছে আশা করা হবে যে মন্থন হার গণনা করতে কোন ফাংশন, স্টেটমেন্ট এবং ক্লজ ব্যবহার করতে হবে।

সাবস্ক্রিপশন ডেটা খুবই ব্যক্তিগত এবং এতে ব্যবহারকারীর ব্যক্তিগত তথ্য রয়েছে। ডেটা সায়েন্টিস্টদের জন্য এটা জানাও গুরুত্বপূর্ণ যে কীভাবে এই ধরনের ডেটা প্রকাশ না করে কাজ করতে হয়। প্রায়শই মন্থন হার গণনা করার জন্য সাধারণ টেবিলের অভিব্যক্তি জড়িত থাকে, যা তুলনামূলকভাবে নতুন ধারণা। সেরা ডেটা বিজ্ঞানীদের জানা উচিত কেন CTE গুলি দরকারী এবং কখন সেগুলি ব্যবহার করতে হবে৷ পুরানো ডেটাবেসগুলির সাথে কাজ করার সময়, যেখানে CTEs অনুপলব্ধ, একজন আদর্শ প্রার্থীর এখনও কাজটি সম্পন্ন করতে সক্ষম হওয়া উচিত।

এখানে একটি কঠিন কাজের উদাহরণ. লিফটে সাক্ষাত্কার নেওয়া প্রার্থীরা কোম্পানিতে ড্রাইভারদের মন্থন হার গণনা করার জন্য এই অ্যাসাইনমেন্টটি পান।

এই সমস্যাটি সমাধান করার জন্য, ডেটা বিজ্ঞানীদের অবশ্যই কেস/when স্টেটমেন্ট, উইন্ডো ফাংশন যেমন LAG(), সেইসাথে FROM/WHERE এবং অন্যান্য মৌলিক ধারাগুলি ব্যবহার করতে হবে। 

উপসংহার

 
অনেক বছর ধরে ডেটা সায়েন্টিস্ট হিসাবে কাজ করা অবশ্যই একটি সিভিতে চিত্তাকর্ষক দেখায় এবং আপনাকে অনেক সাক্ষাত্কার পাবেন। যাইহোক, একবার আপনি দরজায় আপনার পা পেয়ে গেলে, আপনাকে এখনও বছরের অভিজ্ঞতার পরিপূরক জ্ঞান প্রদর্শন করতে হবে। এমনকি যদি আপনার বিস্তৃত অভিজ্ঞতা থাকে এসকিউএল-এ প্রশ্ন লেখা, এটা যেমন সম্পদ ব্যবহার আঘাত না স্ট্র্যাটাস্ক্র্যাচ আপনার জ্ঞান রিফ্রেশ করতে।

 
 
নাট রোসিদি একজন ডেটা সায়েন্টিস্ট এবং পণ্যের কৌশল। এছাড়াও তিনি একজন সহযোগী অধ্যাপক শিক্ষকতা বিশ্লেষণ, এবং এর প্রতিষ্ঠাতা স্ট্র্যাটাস্ক্র্যাচ, একটি প্ল্যাটফর্ম যা তথ্য বিজ্ঞানীদের তাদের ইন্টারভিউয়ের জন্য প্রস্তুত করতে সাহায্য করে যা শীর্ষ কোম্পানিগুলির বাস্তব ইন্টারভিউ প্রশ্ন নিয়ে। তার সাথে সংযোগ করুন টুইটার: StrataScratch or লিঙ্কডইন.

সূত্র: https://www.kdnuggets.com/2022/01/sql-interview-questions-experienced-professionals.html

সময় স্ট্যাম্প:

থেকে আরো কেডনুগেটস

শীর্ষ খবর, 16-22 আগস্ট: ডেটা সায়েন্টিস্ট এবং এমএল ইঞ্জিনিয়ারদের মধ্যে পার্থক্য; প্রিফেক্ট: কিভাবে পাইথন দিয়ে আপনার প্রথম ইটিএল পাইপলাইন লিখবেন এবং তফসিল করবেন

উত্স নোড: 1057130
সময় স্ট্যাম্প: আগস্ট 23, 2021