#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь получить максимальную зарплату за каждый год в таблице с атрибутами TeamID, salary, YearID. Не должно быть сложно, верно? Вот мой запрос:
SELECT teamID, MAX(tS.teamSalary), yearID
FROM
(SELECT
teamID,
sum(salary) AS teamSalary,
yearID
FROM salaries
GROUP BY teamID, yearID) tS
GROUP BY yearID;
Внутренний запрос работает просто отлично, но внешний просто сообщает первый идентификатор команды для каждой группы. Что я делаю не так?
Inner query output:
A 1 2000
B 1 2000
C 2 2000
A 2 2001
B 3 2001
A 2 2002
B 2 2002
Full query output:
A 1 2000
A 2 2001
A 2 2002
Desired output:
C 2 2000
B 3 2001
A 2 2002
Комментарии:
1. Нужен ли вам идентификатор команды в этом, если вы просто делаете для каждого года?
2. Да, это подзапрос для последнего бита, который извлекает название команды из другой таблицы.
3. Можете ли вы привести нам пример вывода, который вы на самом деле хотите получить из запроса
Ответ №1:
Сначала вы получаете максимальную зарплату по годам, затем вы получаете дополнительную информацию:
SELECT teamID, salary, yearID
FROM salaries
JOIN
(SELECT MAX(salary) AS maxSalary,
yearID
FROM salaries
GROUP BY yearID) tS
ON ts.yearID = salaries.yearID
AND ts.maxSalary = salaries.salary
РЕДАКТИРОВАТЬ: Не уверен, хотите ли вы максимальную зарплату за какой-то год, затем к какой команде она принадлежит, или если вы хотите максимальную зарплату по команде и году. Второй вариант здесь:
SELECT MAX(salary) AS maxSalary, yearID, teamID
FROM salaries
GROUP BY yearID, teamID
Комментарии:
1. Я переключился на поиск максимального значения, а затем с помощью объединения, и это, похоже, сработало. Спасибо за вашу помощь!