SQL суммирует общее значение по идентификатору из разных таблиц

#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 его также в список. Это также решает ситуацию, когда у разных сотрудников может быть одно и то же имя.