クエリをクリーンアップすることから始めます。可能な場合は、複数の垂直サブクエリを実行するのではなく、可能な場合は常に各行で計算を実行するようにしてください。これにより、DBMSが同じテーブルに対して複数のパスを実行することが回避されます。
SELECT
(
( (g.wbb * SUM(IF(e.event_cd = 14, 1, 0)))
+ (g.whbp * SUM(IF(e.event_cd = 16, 1, 0)))
+ (g.w1b * SUM(IF(e.event_cd = 20, 1, 0)))
+ (g.w2b * SUM(IF(e.event_cd = 21, 1, 0)))
+ (g.w3b * SUM(IF(e.event_cd = 22, 1, 0)))
+ (g.whr * SUM(IF(e.event_cd = 23, 1, 0)))
)
/
(
SUM(IF(e.ab_fl = 'T', 1, 0))
+ SUM(IF(e.event_cd = 14, 1, 0))
+ SUM(IF(e.sf_fl = 'T', 1, 0))
+ SUM(IF(e.event_cd = 16, 1, 0))
)
) AS woba
FROM events e, guts g
WHERE e.year_id = g.season_id
AND e.pit_start_fl = 'T'
AND e.pit_id = starting_pitcher
GROUP BY g.season;
どこかにコンマをドロップしていないと仮定すると、これは列woba
を返します。 指定された先発投手のために毎年。
e.year_id
のテーブルに参加したことに注意してください SUBSTRING(e.game_ID,4,4)
の代わりに;これにより、SUBSTRING()
を呼び出すオーバーヘッドが回避されます。 各レコードに。この種のことは些細なことのように思えますが、大きなテーブルではすぐに足し合わされる可能性があります。
始めるにはそれで十分です。