#sql
Вопрос:
Я пытаюсь показать общий заработок для каждого сотрудника, но мой запрос показывает сумму всех заработков для одного сотрудника
Вот мой вопрос
SELECT Employee.FirstName , Employee.LastName, SUM(Payments.Value) AS Total_Value
FROM Payments, Employee
WHERE Employee.Employee_ID = Payments.Employee_ID
ORDER BY Employee.Employee_ID
Комментарии:
1. Помечайте только ту базу данных, которую вы используете.
2. @forpas, но я должен отображать имя, фамилию и заработок
Ответ №1:
Ваш запрос должен генерировать ошибку, потому что это запрос агрегации, который не имеет group by
и имеет неагрегированные столбцы.
К сожалению, вы используете базу данных (или ее версию), которая не выдает ошибку. Но вам просто нужно GROUP BY
:
SELECT e.FirstName, e.LastName, SUM(p.Value) AS Total_Value
FROM Payments p JOIN
Employee e
ON e.Employee_ID = p.Employee_ID
GROUP BY e.FirstName, e.LastName, e.Employee_ID
ORDER BY e.Employee_ID;
Примечания:
- Никогда не используйте запятые в
FROM
предложении. - Всегда используйте правильный, явный, стандартный, читаемый
JOIN
синтаксис. - Псевдонимы таблиц облегчают написание и чтение запроса.
- Если вы хотите выполнить сортировку по идентификатору сотрудника, включите
GROUP BY
его также в список. Это также решает ситуацию, когда у разных сотрудников может быть одно и то же имя.