Mysql
 sql >> Database >  >> RDS >> Mysql

ho bisogno di aiuto per aggiungere colonne a una tabella usando la funzione che esegue operazioni aritmetiche tra colonne da due tabelle separate

Inizieremo ripulendo la query. Dovresti sempre provare a eseguire i tuoi calcoli su ogni riga, quando possibile, piuttosto che eseguire più sottoquery verticali, in quanto ciò evita che il DBMS faccia più passaggi sulla stessa tabella.

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;

Supponendo che non abbia lasciato una virgola da qualche parte, questo restituirà una colonna woba per ogni anno per il lanciatore iniziale specificato.

Nota che mi sono unito ai tavoli su e.year_id invece di SUBSTRING(e.game_ID,4,4); questo evita il sovraccarico di chiamare SUBSTRING() su ogni record. Questo genere di cose sembra minore, ma può sommarsi rapidamente su un grande tavolo.

Dovrebbe essere sufficiente per iniziare.