Запрос SQL для получения имени сотрудника и средней заработной платы

Вопрос: Для таблицы 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

Вопрос:

Для таблицы 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

Оцените статью
Добавить комментарий