0

SQL だけでこれを達成できるのか、それとも PHP を使用する必要があるのか​​疑問に思っています。

(ゴルフ) データベースには、roundsテーブルとテーブルがありholesます。 rounds.idラウンドのホールレコードに保存されます。

holesテーブルには (他の多くのフィールドの中でも) firstPuttsecondPutt、 があり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
4

2 に答える 2