हम क्वेरी को साफ करके शुरू करेंगे। आपको हमेशा प्रत्येक पंक्ति में अपनी गणना करने की कोशिश करनी चाहिए, जब संभव हो तो कई लंबवत सबक्वेरी करने के बजाय, क्योंकि यह 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()
calling को कॉल करने के ऊपरी हिस्से से बचा जाता है प्रत्येक रिकॉर्ड पर। इस तरह की बात मामूली लगती है, लेकिन यह एक बड़ी मेज पर जल्दी से जुड़ सकती है।
यह आपको आरंभ करने के लिए पर्याप्त होना चाहिए।