Loading...
+ Нов въпрос
tiapko avatar tiapko 31 Точки

Problem 18. *3rd Highest Salary - judge

Здравейте,

 

Решавам задача "Problem 18.   *3rd Highest Salary" / Exercises: Data Aggregation, и изкарвам отговора с това querry, но judge не го приема за верен:

 

CREATE TABLE tempDB (DepartmentID INT, ThirdHighestSalary DECIMAL(10,2));
DECLARE @cnt INT = (SELECT DISTINCT min(departmentId) FROM Employees)
DECLARE @cnt_total int = (SELECT DISTINCT max(departmentId) FROM Employees)
WHILE @cnt <= @cnt_total
BEGIN
INSERT INTO tempDB (DepartmentID,ThirdHighestSalary)
SELECT DISTINCT departmentId, Salary AS [ThirdHighestSalary] FROM Employees 
 WHERE DepartmentID = @cnt ORDER BY Salary DESC OFFSET 2 ROW FETCH NEXT 1 ROW only
   SET @cnt = @cnt + 1;
END;
SELECT * FROM tempDB;

 

Това querry изкарва същият отговор и judge го приема:

 

SELECT DepartmentID, 
(SELECT DISTINCT Salary FROM Employees 
WHERE DepartmentID = e.DepartmentID 
ORDER BY Salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY) AS ThirdHighestSalary
FROM Employees e
WHERE (SELECT DISTINCT Salary FROM Employees 
WHERE DepartmentID = e.DepartmentID 
ORDER BY Salary DESC OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY) IS NOT NULL
GROUP BY DepartmentID

 

Можете ли да ми кажете на какво се дължи това ?

 

Тагове:
0
Module: C# DB 01/02/2017 11:17:25
Gesh4o avatar Gesh4o Trainer 305 Точки
Best Answer

Здравей,

Пробвай да изпълниш горната заявка, но промени втората колона от таблицата (ThirdHighestSalary) да е от тип MONEY - т.е. да от същия тип данни, от който го "пълниш", тъй като Softuni.dbo.Salary e от тип MONEY.

Поздрави! :)

 

1
tiapko avatar tiapko 31 Точки

Точно това е проблема :). Благодаря.

1
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Защото не може да създаваш таблица в "SQL Server prepare DB & run queries"

0
Gesh4o avatar Gesh4o Trainer 305 Точки

Здравей,

Нито една от стратегиите за Judge НЕ те ограничава да създаваш таблици. Въпросът е до колко това е приложимо за сегашната задача.

Поздрави! :)

1
DDaskalov avatar DDaskalov 10 Точки

Реално всичките тези subquerries си създават едни временни таблички, та :)

0
DDaskalov avatar DDaskalov 10 Точки

Поздравления за елегантното решение... моето се получи поне 3-4 четири пъти по-дълго и още се опитвам да разбера какво точно си направил... ще се чете...

0
lapd87 avatar lapd87 103 Точки
SELECT 
    `department_id`,
    (SELECT DISTINCT
            `e2`.`salary`
        FROM
            `employees` AS `e2`
        WHERE
            `e2`.`department_id` = `e1`.`department_id`
        ORDER BY `e2`.`salary` DESC
        LIMIT 2 , 1) AS `third_highest_salary`
FROM
    `employees` AS `e1`
GROUP BY `department_id`
HAVING `third_highest_salary` IS NOT NULL;

малко подобрение за да избегнем повтарянето

1
pirocorp avatar pirocorp 20 Точки

Аз лично е реших така:

 

  WITH SalaryRank 
       AS(SELECT DepartmentID,
                 Salary,
                 DENSE_RANK() OVER(PARTITION BY DepartmentID ORDER BY Salary DESC) AS [Rank]
            FROM Employees)
SELECT DISTINCT DepartmentID,
       Salary AS ThirdHighestSalary
  FROM SalaryRank
 WHERE [Rank] = 3

 

1
25/11/2018 18:10:03
Cemish avatar Cemish 18 Точки

И аз реших така:

SELECT DISTINCT  DepartmentID,Salary AS 'ThirdHighestSalary'
FROM(
SELECT Employees.DepartmentID,Employees.Salary,DENSE_RANK() OVER   
    (PARTITION BY Employees.DepartmentID ORDER BY Employees.Salary DESC) AS Rank
FROM Employees

) AS Tbl01

WHERE Tbl01.Rank=3

 

ИЛИ

 

SELECT  DepartmentID,Salary AS [ThirdHighestSalary]
FROM(
SELECT Employees.DepartmentID,Employees.Salary,DENSE_RANK() OVER   
    (PARTITION BY Employees.DepartmentID ORDER BY Employees.Salary DESC) AS Rank
FROM Employees

) AS Tbl01

WHERE Tbl01.Rank=3
GROUP BY DepartmentID,Salary

0
21/06/2021 11:18:55
AJmaster avatar AJmaster 5 Точки

Поздравления за решението.

0
sukalu88 avatar sukalu88 44 Точки

The World Health Organization recommends that coronavirus is currently very complex, so prevent it by wearing a mask and washing your hands regularly to limit disease. mapquest driving directions

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