SQL-запрос для вывода списка сотрудников из городов с коллегами
Необходимо вывести список сотрудников, которые работают не в одиночку (т. е больше одного сотрудника на город) и зарабатывают более 500$ ?
Мой код:
CREATE TABLE Employees (Id INT PRIMARY KEY, Name TEXT, City TEXT, Salary INT);
INSERT INTO Employees VALUES (1, 'John Smith', 'New York', '1000');
INSERT INTO Employees VALUES (2, 'Paul Black', 'London', '600');
INSERT INTO Employees VALUES (3, 'Robert Johnson', 'Boston', '700');
INSERT INTO Employees VALUES (4, 'William O’Dell', 'Moscow', '850');
INSERT INTO Employees VALUES (5, 'Lisa Connors', 'New York', '1400');
INSERT INTO Employees VALUES (6, 'Scott Rodgers', 'Moscow', '800');
SELECT distinct City, Name, salary, count (*)AS COUNT
FROM Employees
where Salary>'500'
group by City
Ответы (1 шт):
Автор решения: Yitzhak Khabinsky
→ Ссылка
Пожалуйста, попробуйте следующее решение.
Тип данных столбца TEXT лучше не использовать. Это устарело (deprecated).
SQL
-- DDL и образец вставки данных, начало
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, [Name] VARCHAR(30), City VARCHAR(30), Salary INT);
INSERT INTO @tbl ([Name], City, Salary) VALUES
('John Smith', 'New York', '1000'),
('Paul Black', 'London', '600'),
('Robert Johnson', 'Boston', '700'),
('William O’Dell', 'Moscow', '850'),
('Lisa Connors', 'New York', '1400'),
('Scott Rodgers', 'Moscow', '800');
-- DDL и образец вставки данных, конец
;WITH rs AS
(
SELECT City, Name, salary, cnt = COUNT(NAME) OVER (PARTITION BY City ORDER BY City)
FROM @tbl
WHERE Salary > 500
)
SELECT * FROM rs
WHERE cnt > 1;
Результат
| City | Name | salary | cnt |
|---|---|---|---|
| Moscow | William O’Dell | 850 | 2 |
| Moscow | Scott Rodgers | 800 | 2 |
| New York | Lisa Connors | 1400 | 2 |
| New York | John Smith | 1000 | 2 |
