Loading...
Andrian_Jambazov avatar Andrian_Jambazov 6 Точки

[HOMEWORK] Databases Basics - Basic CRUD - Problem 10. Find Names of All Employees

Колеги, по отношение на задача 10 от Basic CRUD exercises - аз ли съм тъп или има някакъв проблем в judge-a (вече видяхме, че има за 13та задача, аз вчера докладвах през системата за 17та - view-то всъщност трябва да е именувано 'V_EmployeeNameJobTitle' , а не както е по задание, надявам се да са го оправили вече)

Problem 10. Find Names of All Employees

Write a SQL query to find the full name of all employees whose salary is 25000, 14000, 12500 or 23600. Full Name is combination of first, middle and last name (separated with single space) and they should be in one column called “Full Name”.

Това е кодът, в SSMS-a си дава правилния резултат, и изобщо не виждам какъв може да е проблемът тук:

SELECT CONCAT(FirstName,' ',MiddleName,' ',LastName) AS [Full Name] FROM Employees
WHERE Salary IN (25000, 14000, 12500, 23600 )

Предварително благодаря! :)

0
Databases Basics
mishomihaylov avatar mishomihaylov 67 Точки
Best Answer

Интересен въпрос. Накара ме да го разцъкам. Отговорът е следния:

Това е моят код:

SELECT FirstName + ' ' + MiddleName + ' ' + LastName FROM Employees
WHERE Salary IN(25000, 14000, 12500, 23600)


Ако пуснеш твоя и моя код ще забележиш разликата, че на 12, 28, 30 и 68-мия резултат при мен е NULL, а при теб излиза конкатенирано първото и последното име само. Това е така, защото въпросните хора нямат MiddleName(той е NULL) и когато събираш нещо с NULL то става NULL, а при теб се конкатенират и това, че няма MiddleName не го бърка, то си събира стринговете наред, което пък в реална ситуация и имайки в предвид резултата, би и по-добре според мен.

Успех!

1
27/09/2016 15:50:50
Andrian_Jambazov avatar Andrian_Jambazov 6 Точки

Благодаря за разясненията, сам никога нямаше да се сетя за този метод за формиране на името, признавам си :)

Иначе на мен ми се струва, че задачата не е съвсем коректно зададена, още повече, че резултатът при мен си излиза и бях крайно озадачен. Подозирам, че не ми дава точките, защото брои спейсовете, а при моя метод се получават два, ако липсва презимето. :)

В момента мисля как може да се премахне един спейс, ако презимето е NULL, въртят ми се разни идеи, ама усещам, че ще падне мислене.

Още веднъж благодаря!

1
mishomihaylov avatar mishomihaylov 67 Точки

Чесно казано аз в началото, като видях твоето решение, си мислех, че моето е грешно. Но май самата задача всъщност ни е дадена за да се усетим, че когато се събере(с +) string с NULL се получава NULL. И благодарение на това, можеш да си дадеш отговор как да махнеш един спейс, ако презимето е NULL на 17.Problem. Ето кода:

 

SELECT FirstName + ISNULL(' ' + MiddleName + ' ', ' ') + LastName as [Full Name], JobTitle
FROM Employees

 

1
27/09/2016 15:57:18
Rextor92 avatar Rextor92 149 Точки

A, отлично! Пробвах се с ISNULL, с COALESCE - един и същ резултат (двойно празно място при NULL MiddleName). Пробвах и с CASE - не мога да задам име на селекцията - AS [FullName] дава грешка. Въобще не съобразих, че реално.. Null + whitespace = null . 

Благодаря!

1
vani4ka66 avatar vani4ka66 24 Точки

И аз доста се тормозих над тази задача. Моя код, според мен е верен, но не работи:

select 
case when e.MiddleName is not null then concat(e.FirstName, ' ',  e.MiddleName, ' ',  e.LastName)
        else concat(e.FirstName, ' ',  e.LastName)
end as [Full Name]
from Employees e
where e.Salary in (25000, 14000, 12500, 23600)

0
mishomihaylov avatar mishomihaylov 67 Точки

Да, кодът е верен, но за 10ти проблем няма да проработи, поради гореописаната причина. Иначе за 17ти проблем, би трябвало да работи. 

0
kaloyannikov avatar kaloyannikov 531 Точки
CREATE VIEW v_employees_job_titles AS
SELECT
CASE WHEN middle_name IS NOT NULL 
THEN CONCAT(first_name,IFNULL('',middle_name),' ',last_name)
ELSE CONCAT(first_name,' ',last_name)
END AS full_name,job_title
FROM employees;

На 17та това ми е заявката, тези които са с празен String за middle_name при мен излизат ок (като Lynn Tsoflias например), не виждам къде е проблема 

0
28/09/2016 20:35:50
vani4ka66 avatar vani4ka66 24 Точки

Твоя кейс няма логика - първо казваш ако MiddleName не е NULL, а същевременно вътре конкатенираш ако MiddleName is NULL. Тоест в първото конкатениране IFNULL  е излишно. 

По скоро трябва да е нещо такова:

 

case when e.MiddleName is not null then (e.FirstName + ' ' + e.MiddleName + ' ' + e.LastName)

else (e.FirstName + '  ' + e.LastName)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.