Мне интересно, сможет ли SQL выполнить это самостоятельно или использовать PHP.Условно обновить запись на основе значений объединения
База данных (гольф) содержит таблицу rounds
и таблицу holes
. rounds.id
хранится в записях отверстий для раунда.
holes
стол имеет (среди многих других полей) firstPutt
, secondPutt
, thirdPutt
. Это поплавки, хранящие расстояния и по умолчанию равные нулю.
Что мой работодатель хотел бы сделать, так это хранить в круглом столе сумму за раунд длины последнего удара, сделанного для всех отверстий в этом раунде.
Я понимаю, что если бы у меня была таблица putts
, ссылающаяся на holes.id
, это была бы лучшая структура, но в настоящее время это невозможно.
Так что обновление в pseudoSQL будет что-то вроде
UPDATE holes h, rounds r
SET r.sumOfLastPutts = (
SELECT thirdPutt if thirdPutt is not 0
OR secondPutt if secondPutt is not zero AND thirdPutt is zero
OR firstPutt if firstPutt is not zero AND secondPutt is zero)
) WHERE h.round = rounds.id
Это возможно с использованием только SQL?
В этом примере число для раунда будет 145, сумма чисел в красных квадратах.
Уходя ответ Мартина Паркин, я могу получить сумму за один раунд как это:
SELECT
SUM(
CASE
WHEN h.thirdPutt != 0 THEN h.thirdPutt
WHEN h.secondPutt != 0 THEN h.secondPutt
WHEN h.firstPutt != 0 THEN h.firstPutt
END
)
FROM holes h
WHERE h.round = 3044
Спасибо за ответ! Я очень рад узнать о CASE в SQL. Я не знал. Ваш ответ близок, но он не суммирует несколько строк записей «отверстий», где h.round = r.id. Я добавил иллюстративный пример некоторых данных на мой вопрос. В примере ваш запрос получает значение 12, но сумма равна 145. – jerrygarciuh
Получил его сортировку. Спасибо, что преподал мне о CASE! – jerrygarciuh