SQL だけでこれを達成できるのか、それとも PHP を使用する必要があるのか疑問に思っています。
(ゴルフ) データベースには、rounds
テーブルとテーブルがありholes
ます。 rounds.id
ラウンドのホールレコードに保存されます。
holes
テーブルには (他の多くのフィールドの中でも) firstPutt
、secondPutt
、 がありthirdPutt
ます。これらは距離を格納する float で、デフォルトはゼロです。
私の雇用主がやりたいことは、そのラウンドのすべてのホールで行われた最後のパットの長さのラウンドの合計をラウンド テーブルに保存することです。
putts
これを参照するテーブルがあればholes.id
、より良い構造になると思いますが、現時点ではそれは不可能です。
したがって、疑似SQLでの更新は次のようになります
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 で、赤いボックス内の数の合計です。
マーティン・パーキンの答えから外れると、次のように 1 ラウンドの合計を得ることができます。
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