Вопрос:
Для таблицы Employee с столбцами EmpId, Name, Salary можно написать SQL-запрос, чтобы результат содержал имя каждого сотрудника и среднюю зарплату всех сотрудников?
Пример данных
EmpId Name Salary 1 Alice 12000 2 Bob 12000 3 Charlie 10000 4 Doug 6000
Мне нужен запрос, который вернет этот результат:
результат
Name AvgSalary Alice 10000 Bob 10000 Charlie 10000 Doug 10000
Здесь 10000 – это средняя зарплата всех 4 сотрудников.
Лучший ответ:
Таким образом, вы получаете среднее значение всех зарплат вместе со списком каждого сотрудника. Вам не нужно каждый раз вычислять его, и на самом деле это было бы бесполезно, но вы могли бы просто сделать это:
SELECT Name, (SELECT AVG(Salary) FROM SampleData) AS AvgSalary FROM SampleData
В противном случае вы могли бы просто получить среднюю зарплату один раз:
DECLARE @AVGSALARY float SET @AVGSALARY = (SELECT AVG(Salary) FROM SampleData) SELECT Name, @AvgSalary AS AvgSalary FROM SampleData Ответ №1
Вы можете использовать для этого функцию окна, но подзапрос в SELECT должен быть быстрее:
SELECT name, avg(salary) OVER () as avgSal FROM SampleData; Ответ №2select distinct name, average from sampledata cross join (select avg(salary) average from sampledata) a1 Ответ №3SELECT Name, AVG(Salary) FROM SampleData GROUP BY Name