Famous SQL Interview Question | First Name , Middle Name and Last Name of a Customer

  Рет қаралды 24,522

Ankit Bansal

Ankit Bansal

4 ай бұрын

In this video we will discuss a famous SQL interview problem where we need to segregate first name , middle name and last name from the customer name. I am going to explain the solution in a step by step manner.
script:
create table customers (customer_name varchar(30))
insert into customers values ('Ankit Bansal')
,('Vishal Pratap Singh')
,('Michael');
Zero to hero(Advance) SQL Aggregation:
• All About SQL Aggregat...
Most Asked Join Based Interview Question:
• Most Asked SQL JOIN ba...
Solving 4 Trick SQL problems:
• Solving 4 Tricky SQL P...
Data Analyst Spotify Case Study:
• Data Analyst Spotify C...
Top 10 SQL interview Questions:
• Top 10 SQL interview Q...
Interview Question based on FULL OUTER JOIN:
• SQL Interview Question...
Playlist to master SQL :
• Complex SQL Questions ...
Rank, Dense_Rank and Row_Number:
• RANK, DENSE_RANK, ROW_...
#sql #dataengineer

Пікірлер: 94
@ankitbansal6
@ankitbansal6 4 ай бұрын
Join 100 days of SQL challenges where I have created hand picked SQL interview questions to sky rocket your SQL skills. 100daysofsql.com/
@neerajpathak7585
@neerajpathak7585 3 ай бұрын
This also seems to work fine for me : SELECT split_part(customer_name,' ',1) as first_name ,case when split_part(customer_name,' ',3) ='' then '' else split_part(customer_name,' ',2) end as second_name ,case when split_part(customer_name,' ',3) ='' then split_part(customer_name,' ',2) else split_part(customer_name,' ',3) end as third_name from customers
@dfkgjdflkg
@dfkgjdflkg 3 ай бұрын
Not surprised endlessly impressive mastery that can only be envied. thanks
@deepeshmatkati3058
@deepeshmatkati3058 4 ай бұрын
Great explanation Ankit
@roshangangurde7188
@roshangangurde7188 4 ай бұрын
Great explanation sir 🙏🙏
@srinubathina7191
@srinubathina7191 4 ай бұрын
Thank you Bro again explanation is next level
@Ashu23200
@Ashu23200 2 ай бұрын
Superb!
@vsagar4b38
@vsagar4b38 4 ай бұрын
Liked the Logic and Explanation, superb Enjoyed. Thanks Ankit
@ankitbansal6
@ankitbansal6 4 ай бұрын
Glad you liked it
@DE_Pranav
@DE_Pranav 6 күн бұрын
with cte as( select * from customers cross apply string_split(customer_name,' ') ) ,cte2 as( select *, ROW_NUMBER() over(partition by customer_name order by(select null)) as rn, count(*) over (partition by customer_name) as cnt from cte ) select customer_name, max(case when rn=1 then value end) as firstname, max(case when rn=2 and cnt=3 then value end) as middlename, max(case when (rn=2 and cnt=2) or rn=3 then value end) as lastname from cte2 group by customer_name
@AnilKumar-qe6er
@AnilKumar-qe6er 4 ай бұрын
Thanks for sharing good problems❤ worth watching
@ankitbansal6
@ankitbansal6 4 ай бұрын
Glad you enjoyed it
@electricalsir
@electricalsir 4 ай бұрын
Love you 💓
@arvindgurjar3300
@arvindgurjar3300 4 ай бұрын
Thank you so much
@ankitbansal6
@ankitbansal6 4 ай бұрын
You're most welcome
@architsrivastava6649
@architsrivastava6649 4 ай бұрын
My interview in 30 mins and was watching your Sql playlist ❤️
@bhumikalalchandani321
@bhumikalalchandani321 4 ай бұрын
good luck!!
@ankitbansal6
@ankitbansal6 4 ай бұрын
All the best 🙂
@CricketLover-qy9nn
@CricketLover-qy9nn 4 ай бұрын
If u don't mind can you share your interview experience.
@pradeeppatil7168
@pradeeppatil7168 3 ай бұрын
Hi Ankit, i guess i have made it more simple, just check it. select *, case when len(empname)-len(replace(empname,' ',''))=1 OR len(empname)-len(replace(empname,' ',''))=2 then substring(empname,1,charindex(' ',empname)) ELSE EmpName end as F_Name, case when len(empname)-len(replace(empname,' ',''))=2 then substring(empname,charindex(' ',empname)+1,CHARINDEX(' ',empname,CHARINDEX(' ',empname)+1)-charindex(' ',empname)) end as M_Name, case when len(empname)-len(replace(empname,' ',''))=1 OR len(empname)-len(replace(empname,' ',''))=2 then substring(empname,charindex(' ',empname,5)+1,len(empname)) end as L_Name from Employee
@mangeshbhumkar2075
@mangeshbhumkar2075 4 ай бұрын
In bigquery possible with split function with safe_offset(0),safe_offset(1) and safe_offset(2)
@shyamu431
@shyamu431 4 ай бұрын
Thanks Ankit, your questions and the way you solve it, is amazing. It's very good way to build the logical understanding by wathcing your videos. Coming to this particular video. If the name has more than 3 words i.e. Vijay Pratap Singh Rathore. The query will become more complex. Is there any other method to solve it. Once again, I appreciate your efforts in making these wonderful tutorials.
@ankitbansal6
@ankitbansal6 4 ай бұрын
Yes it will become complex. Also you need to decide what you want to keep in the middle name and last name. In postgres and redshift we have a split part function which can make the solution easy . I hope other databases introduce that function.
@jhonsen9842
@jhonsen9842 4 ай бұрын
Could you please post more Data Engineering SQL Questions . I think these questions are more alligned to Data Analyst which is cool also. Looking some super hard questions on Join and CTE,Subqueries.
@SwathiRavichandran-xh8wq
@SwathiRavichandran-xh8wq 27 күн бұрын
Hi Ankit ..your videos are good . Can you help how this can be achieved in oracle sql
@rahulkanojiya6256
@rahulkanojiya6256 2 ай бұрын
another way to solve the same question without using string fuctions : with cte as( select customer_name, value ,row_number() over (partition by customer_name order by customer_name) as rnk ,count(value) over(partition by customer_name order by customer_name) as cnt from customers cross apply string_split(customer_name , ' ') ) ,cte2 as ( select customer_name ,case when rnk = 1 then value end as first_name ,case when rnk = 2 and cnt = 3 then value end as middle_name ,case when (rnk = 2 and cnt = 2) or (rnk = 3 or cnt = 3) then value end as last_name from cte ) select customer_name , max(first_name) as first_name , max(middle_name) as middle_name , max(last_name) as last_name from cte2 group by customer_name
@TanmayModi06
@TanmayModi06 2 ай бұрын
This Works fine: with cte as( select *, ROW_NUMBER() over(order by customer_name) as rn from customers ), cte1 as( select value, rn, ROW_NUMBER() over(partition by rn order by rn) as rk from cte cross apply string_split(customer_name, ' ') ), cte2 as( select *, case when rk = 1 then value end as firstname, case when rk 1 and rk (select Max(rk) from cte1 where rn = a.rn) then value end as middle_name, case when rk = (select Max(rk) from cte1 where rn = a.rn) and rk 1 then value end as lastname from cte1 a ) select STRING_AGG(firstname,'') as firstname, STRING_AGG(middle_name,'') as middle_name, STRING_AGG(lastname,'') as lastname from cte2 group by rn
@usharanikallubhavi7466
@usharanikallubhavi7466 2 ай бұрын
Hi Ankit. To extract middle_name, can we write SUBSTRING(customer_name, first_space_position+1, second_space_position-1)
@GiriPrasath.D
@GiriPrasath.D 4 ай бұрын
From this question, i learned, Char index, substring, left and right functions, you are SQL hero Ankit. and how to use the substring with len and charindex to extract the first , middle and last name.
@ankitbansal6
@ankitbansal6 4 ай бұрын
Keep learning 😊
@ayushmi77al
@ayushmi77al 4 ай бұрын
In postgresql it's very easy, we can use split_part function.
@ankitbansal6
@ankitbansal6 4 ай бұрын
Right but thats not available in most of other databases.
@ayushmi77al
@ayushmi77al 4 ай бұрын
So true, your SQL interview question series so very helpful, thank you so much for that 🙏
@anudipray4492
@anudipray4492 Ай бұрын
Oracle function much better
@yakkaluruvijaysankar787
@yakkaluruvijaysankar787 4 ай бұрын
Your mic quality is not good. There is no clarity on what you are explaining. The information is very good and informative. Please do more videos like this.
@007SAMRATROY
@007SAMRATROY 4 ай бұрын
So if there are N number of words in the name, we will have to derive N - 1 number of space positions right?
@user-ok8ou9ro2y
@user-ok8ou9ro2y 2 ай бұрын
with CTE as ( select * from customers cross apply string_split(customer_name,' ') ), CTE2 as (select *,count(*) over(partition by customer_name) as words_count,row_number() over(partition by customer_name order by (select null)) as rn from CTE) select customer_name,max(case when words_count in (1,2,3) and rn=1 then value end) as first_name , max(case when words_count in (3) and rn=2 then value end) as middle_name , max(case when words_count in (2) and rn=2 or words_count in (3) and rn=3 then value end) as last_name from CTE2 group by customer_name
@rajatbhat2074
@rajatbhat2074 3 ай бұрын
Hi Ankit, Tried below solution in PostgreSQL, its working. Let me know your thoughts. with cte as ( select customer_name, length(customer_name)- length(replace(customer_name,' ','')) as no_of_spaces from customers ) select customer_name, case when no_of_spaces >=0 then split_part(customer_name, ' ', 1) end as first_name, case when no_of_spaces =1 then split_part(customer_name, ' ', no_of_spaces+1) end as last_name from cte;
@ankitbansal6
@ankitbansal6 3 ай бұрын
It's good but the split part function is not available in most other databases
@monuoriginal7425
@monuoriginal7425 3 ай бұрын
brother electoral bond par ek baar join laga ke bataona problem aarahi hai meko i am beginer also ....because data duplicates.....
@akashmukherjee9011
@akashmukherjee9011 Ай бұрын
with cte as ( select customer_name, length(customer_name)-length(replace(customer_name,' ','')) as no_of_spaces from customers) select *, case when no_of_spaces = 0 then customer_name when no_of_spaces = 1 then substring_index(customer_name,' ',1) when no_of_spaces = 2 then substring_index(customer_name,' ',1) else null end as first_name, case when no_of_spaces = 2 then substring_index(substring_index(customer_name,' ',-2),' ',1) else null end as middle_name, case when no_of_spaces = 1 then substring_index(customer_name,' ',-1) when no_of_spaces = 2 then substring_index(customer_name,' ',-1) else null end as last_name from cte
@SiiitiiFreelancing-jl3ty
@SiiitiiFreelancing-jl3ty 3 ай бұрын
in Postgres? with strpos or position? how is second space found?
@vikramjitsingh6769
@vikramjitsingh6769 3 ай бұрын
Those who are looking for MySQL version Solution - select *, substring_index(customer_name, ' ',1) as First , case when x >= 1 then substring_index(customer_name, ' ',-1) else null end as last , case when x >= 2 then substring_index(substring_index(customer_name, ' ',2),' ',-(x-1)) else null end as middle from (select *, length(customer_name) - length(replace(customer_name,' ','')) as x from customers)x
@jececdept.9548
@jececdept.9548 3 ай бұрын
can use locate as well
@chrishkumar1250
@chrishkumar1250 27 күн бұрын
MYSQL SELECT substring_index(customer_name," ",1) as first_name, if (length(customer_name) - length(replace(customer_name, ' ', '')) > 1 , substring_index(substring_index(customer_name," ",2), " ",-1), Null) as second_name, if (length(customer_name) - length(replace(customer_name, ' ', '')) >= 2 , substring_index(substring_index(customer_name," ",3), " ",-1), Null) as third_name from customers
@user-cs8eb1ru8x
@user-cs8eb1ru8x 3 ай бұрын
What is meant by SQL and t SQL is it necessary for data analytics job
@gauravkakhani7165
@gauravkakhani7165 3 ай бұрын
Using right function last name: Case when no_of_spaces= 0 then null when no_of_spaces= 1 then right(customer_name,len(customer_name) - firstspaceposition) else right(customer_name,len(customer_name)- second space position)end as lastname from cte;
@ankitbansal6
@ankitbansal6 3 ай бұрын
Perfect 💪
@sahilummat8555
@sahilummat8555 21 күн бұрын
;with cte as ( select *, LEN(customer_name)- len(REPLACE(customer_name,' ','')) as spaces, CHARINDEX(' ',customer_name) as space_position, CHARINDEX(' ',customer_name,CHARINDEX(' ',customer_name)+1) as space_position_2 from customers) select *, case when spaces=0 then customer_name when spaces!=0 then left(customer_name,space_position-1) end as first_name , case when spaces>1 then SUBSTRING(customer_name,space_position+1,space_position_2-space_position) end as middle_name , case when spaces=1 then right(customer_name,len(customer_name)-space_position) when spaces>1 then right(customer_name,len(customer_name)-space_position_2) end as last_name from cte
@boogieman8827
@boogieman8827 3 ай бұрын
how much SQL and python is same in Data Engineering vs Data Analytics?
@apurvasaraf5828
@apurvasaraf5828 4 ай бұрын
with cte as (select *,LEN(customer_name)-len(REPLACE(customer_name,' ','')) as l ,CHARINDEX(' ',customer_name) as f, CHARINDEX(' ',customer_name,CHARINDEX(' ',customer_name)+1) as s from Customers) select *,case when l=0 then customer_name else substring(customer_name,1,f-1) end as firstn, case when l
@prakritigupta3477
@prakritigupta3477 2 ай бұрын
This is the solution in PostgresSQL select split_part(customer_name,' ',1) as first_name, split_part(customer_name,' ',2) as middle_name, split_part(customer_name,' ',3) as last_name from customers;
@ankitbansal6
@ankitbansal6 2 ай бұрын
If there is no middle name then your query will give last name as null and middle name will be last name.
@vinil9212
@vinil9212 19 күн бұрын
can middle name be extracted with LEFT or RIGHT?
@paritoshjoshi5623
@paritoshjoshi5623 3 ай бұрын
with temp as( select customer_name, length(customer_name)-length(replace(customer_name,' ','')) ct from customers) select substring_index(customer_name,' ',1) as first_name ,if(ct=2,substring_index(substring_index(customer_name,' ',-2),' ',1) ,null) as middle_name ,if(ct=1 or ct=2,substring_index(customer_name,' ',-1),null) as last_name from temp;
@adharshsunny5154
@adharshsunny5154 4 ай бұрын
Please do create AWS videos
@electricalsir
@electricalsir 4 ай бұрын
Same
@DEwithDhairy
@DEwithDhairy 2 ай бұрын
PySpark Version of this problem : kzfaq.info/get/bejne/kNhmiLuX2dTVf4k.html
@kedarwalavalkar6861
@kedarwalavalkar6861 4 ай бұрын
My solution : with cte as ( select *, substring_index(customer_name,' ',1) as a ,substring_index(substring_index(customer_name,' ',2),' ',-1) as b ,substring_index(customer_name,' ',-1) as c ,round((length(customer_name) - length(replace(customer_name,' ','')))/length(' '),0) as leng from custs ) select a as first_name ,case when leng = 2 then b else null end as middle_name ,case when leng = 1 then b when leng = 2 then c else null end as last_name from cte;
@naveenvjdandhrudu5141
@naveenvjdandhrudu5141 4 ай бұрын
There is only medium & complex in your play list
@naveenvjdandhrudu5141
@naveenvjdandhrudu5141 4 ай бұрын
Bro just post some easy interview questions in sql
@ankitbansal6
@ankitbansal6 4 ай бұрын
Ok next time
@sarathmaya6083
@sarathmaya6083 2 ай бұрын
@ankitbansal6 please review RIGHT function for last name case when no_of_space=0 then null --when no_of_space=1 then SUBSTRING(customer_name,first_space_position+1,first_space_position) --when no_of_space=2 then SUBSTRING(customer_name,second_space_position+1,second_space_position) when no_of_space=1 then RIGHT(customer_name,first_space_position) when no_of_space=2 then RIGHT(customer_name,second_space_position-first_space_position-no_of_space) end as last_name
@hsk7715
@hsk7715 3 ай бұрын
it's look difficult
@boogieman8827
@boogieman8827 4 ай бұрын
Is Syllabus for Data engineer and Data Analyst the same? How much are the similarities?
@Tech_world-bq3mw
@Tech_world-bq3mw 4 ай бұрын
its different
@boogieman8827
@boogieman8827 3 ай бұрын
@@Tech_world-bq3mw how much SQL and python is same in Data Engineering vs Data Analytics?
@user-dw4zx2rn9v
@user-dw4zx2rn9v 3 ай бұрын
MySQL Solution: with cte as ( select customer_name, (length(customer_name) - length(replace(customer_name, ' ', '')) + 1) as cnt_of_words from customers ) SELECT CASE WHEN cnt_of_words = 1 THEN customer_name -- Only one word, consider it as the first name WHEN cnt_of_words = 2 THEN SUBSTRING_INDEX(customer_name, ' ', 1) -- Two words, consider the first word as first name WHEN cnt_of_words = 3 THEN SUBSTRING_INDEX(customer_name, ' ', 1) -- Three words, consider the first word as first name END AS first_name, CASE WHEN cnt_of_words = 3 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(customer_name, ' ', 2), ' ', -1) -- Three words, consider the second word as middle name END AS middle_name, CASE WHEN cnt_of_words >= 2 THEN SUBSTRING_INDEX(customer_name, ' ', -1) -- At least two words, consider the last word as last name END AS last_name FROM cte;
@user-zf7mx6zj4v
@user-zf7mx6zj4v 3 ай бұрын
Hello Sir in my sql it is showing error. I have used INSTR Function
@ankitbansal6
@ankitbansal6 3 ай бұрын
Cool
@akashsonone2838
@akashsonone2838 3 ай бұрын
Hello Ankit , I've attempted another approach. Please inform me if it's functioning correctly in every corner case as well. WITH CTC AS( SELECT *, LEN(CUSTOMER_NAME) - LEN(REPLACE(CUSTOMER_NAME,' ','')) AS NO_OF_SPACES, LEFT(CUSTOMER_NAME, CHARINDEX(' ',CUSTOMER_NAME)) AS FIRST_NAME, RIGHT(CUSTOMER_NAME, CHARINDEX(' ',REVERSE(CUSTOMER_NAME))) AS LAST_NAME FROM CUSTOMERS ) SELECT CASE WHEN NO_OF_SPACES = 0 THEN CUSTOMER_NAME ELSE FIRST_NAME END AS FIRST_NAME, CASE WHEN NO_OF_SPACES = 2 THEN SUBSTRING(CUSTOMER_NAME,LEN(FIRST_NAME)+2, LEN(CUSTOMER_NAME)-LEN(FIRST_NAME)-LEN(LAST_NAME)) END AS MIDDLE_NAME, CASE WHEN LEN(LAST_NAME) = 0 THEN NULL ELSE LAST_NAME END AS LAST_NAME FROM CTC
@zainaltaf4935
@zainaltaf4935 4 ай бұрын
Just confused from where u find such questions 😅
@saipranay1318
@saipranay1318 3 ай бұрын
I feel the same !! lol 😀
@priyanshushak7705
@priyanshushak7705 2 ай бұрын
*for mysql versions which does not have charindex and its equivalent or if there are multiple middle names* : use below approach with cte_spaces as ( select * , length(customer_name)- length(replace( customer_name, ' ','')) as no_of_spaces from customers ) select * , substring_index(customer_name, " ",1) as first_name, case when no_of_spaces > 1 then substring_index(substring_index(customer_name, " ", (-1 * no_of_spaces)), " ", no_of_spaces -1) end as middle_name, case when no_of_spaces > 0 then substring_index(customer_name, " ",-1) end as last_name from cte_spaces
@Hope-xb5jv
@Hope-xb5jv 3 ай бұрын
Logic fail if two or three space between name
@ankitbansal6
@ankitbansal6 3 ай бұрын
You can trim to single space first
@Tech_world-bq3mw
@Tech_world-bq3mw 4 ай бұрын
You logic will fail if there is space in starting or in ending of string.
@ankitbansal6
@ankitbansal6 4 ай бұрын
In that case you can just trim the customer name in first cte and then as it is it will work
@snehalpattewar7864
@snehalpattewar7864 3 ай бұрын
SELECT SUBSTRING_INDEX(name, ' ', 1) AS first_name, CASE WHEN LENGTH(name) - LENGTH(REPLACE(name, ' ', '')) > 1 THEN SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', -2), ' ', 1) ELSE NULL END AS middle_name, SUBSTRING_INDEX(name, ' ', -1) AS last_name FROM your_table_name;
@samiphani2473
@samiphani2473 Ай бұрын
SELECT customer_name, CASE WHEN size(split(customer_name, ' ')) = 2 THEN split(customer_name, ' ')[0] ELSE split(customer_name, ' ')[0] END AS First_Name, CASE WHEN size(split(customer_name, ' ')) = 2 THEN NULL ELSE split(customer_name, ' ')[1] END AS Middle_Name, CASE WHEN size(split(customer_name, ' ')) = 2 THEN split(customer_name, ' ')[1] ELSE split(customer_name, ' ')[2] END AS Last_Name FROM customers;
@iramansari3625
@iramansari3625 3 ай бұрын
what if we have more then 2 space then @ankitbansal6 ?
@nipunshetty9640
@nipunshetty9640 3 ай бұрын
Hii Ankit bansal from my Side small request, As told by you in UR LINKEDIN PROFILE, Supply chain Analytics, Could you make one Video of SUPPLY CHAIN ANALYTICS BY TAKING PROCUREMENT SUPPLY CHAIN DATA SET AND Do DATA ANALYSIS so it will help me and even every audience please My Request Sir @ankitbansal6
All About SQL Aggregations | SQL Advance | Zero to Hero
17:43
Ankit Bansal
Рет қаралды 49 М.
Русалка
01:00
История одного вокалиста
Рет қаралды 6 МЛН
DO YOU HAVE FRIENDS LIKE THIS?
00:17
dednahype
Рет қаралды 104 МЛН
아이스크림으로 체감되는 요즘 물가
00:16
진영민yeongmin
Рет қаралды 56 МЛН
КАРМАНЧИК 2 СЕЗОН 7 СЕРИЯ ФИНАЛ
21:37
Inter Production
Рет қаралды 551 М.
RANK, DENSE_RANK, ROW_NUMBER SQL Analytical Functions Simplified
9:42
Practice SQL Interview Query | Big 4 Interview Question
14:47
Русалка
01:00
История одного вокалиста
Рет қаралды 6 МЛН