Вычесть значения из одной таблицы и двух разных столбцов

Это моя таблица с данными:

Таблица input_data:

+-------------+------------+-------------+-------------+
| UID         | Code       | QTOut       | QTIn        |
+-------------+------------+-------------+-------------+
| A           | 1          | 5000        | 0           |
| A           | 2          | 20000       | 0           |
| A           | 3          | 22000       | 0           |
| A           | 4          | 14000       | 0           |
| A           | 1          | 0           | 5000        |
| A           | 2          | 0           | 4000        |
| A           | 4          | 0           | 11          |
| A           | 1          | 1000        | 0           |
+-------------+------------+-------------+-------------+

И это должно быть на выходе:

Таблица output_data:

+-------------+------------+-------------+
| UID         | Code       | Total       |
+-------------+------------+-------------+
| A           | 1          | 1000        |
| A           | 2          | 16000       |
| A           | 4          | 22000       | 
| A           | 3          | 13899       |   
+-------------+------------+-------------+  

Цель каждого кода состоит в том, чтобы получить, сколько штук осталось.

До сих пор я пробовал этот способ, но результат равен 0:

SELECT o.UID, o.Code, (o.QTOut- tt.QTIn) AS Total
FROM input_data o
LEFT JOIN input_data  tt
ON o.UID = tt.UID
WHERE o.UID= 'A' 
GROUP BY o.Code

Ожидаемый результат не имеет смысла. Почему результат для (UID=A, Code=1) 1000?

SOS 21.03.2022 21:05

@ RF1991 ты прав, извини. это была моя ошибка при наборе текста.

Josef 21.03.2022 21:08
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
2
36
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
SELECT uid,
       code,
       Sum(qtout) - Sum(qtin) AS Total
FROM   input_data 
GROUP  BY uid,
          code  

Ваш код был очень близок. Вам просто нужно было агрегировать результат с помощью функции СУММА.

КУДА ограничивает ваш результат запрошенным [UID].

SELECT o.UID,
       o.CODE,
       SUM(QTOut) - SUM(QTIn) AS Total
FROM   input_data o
WHERE o.UID = 'A'
GROUP  BY UID,
          CODE  

Другие вопросы по теме