Mysql-вычесть значения между строками, где значения столбцов соответствуют

У меня есть таблица типа:

Number  |  Event  |  Weight
1            4          150
1            4          160
2            5          200
2            4          200
3            6          190
3            6          195

Для каждой строки я хотел бы вычесть из ее WeightWeight другой строки, где Number и Event совпадают (если существуют). Желаемый результат:

Number  |  Event  |  Weight  | DIFF
1            4          150    -10
1            4          160     10
2            5          200    NULL
2            4          200    NULL
3            6          190     -5
3            6          195      5

Возможна ли такая операция? Не уверен, что это актуально, в конце концов мне нужно будет превратить этот запрос в view. Заранее спасибо.

Что должно получиться, если таблица содержит 3 и более строк с одинаковыми комбинациями числа и события?

Ruud Helderman 06.03.2019 21:31

Я забыл отметить, что в таблице будет только одно совпадение.

machump 06.03.2019 21:36
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
226
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это можно сделать, просто вычитая столбец в объединенной таблице. Когда один из операндов равен нулю, результат арифметической операции равен нулю:

select a.Number, a.Event, a.Weight, a.Weight - b.Weight as DIFF
from a
left join b on a.Number = b.Number and a.Event = b.Event
Ответ принят как подходящий

Вам нужно левое соединение:

select 
  t.*,
  t.weight - tt.weight diff
from tablename t left join tablename tt
on tt.number = t.number and tt.event = t.event and tt.weight <> t.weight

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