sql >> Base de Datos >  >> RDS >> Mysql

necesita ayuda para agregar una columna a una tabla usando una función que realiza operaciones aritméticas entre columnas de dos tablas separadas

Comenzaremos limpiando la consulta. Siempre debe intentar realizar sus cálculos en cada fila cuando sea posible en lugar de realizar varias subconsultas verticales, ya que esto evita que el DBMS realice varias pasadas sobre la misma tabla.

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;

Suponiendo que no he dejado caer una coma en alguna parte, esto devolverá una columna woba por cada año para el lanzador abridor especificado.

Tenga en cuenta que me uní a las tablas en e.year_id en lugar de SUBSTRING(e.game_ID,4,4); esto evita la sobrecarga de llamar a SUBSTRING() en cada registro. Este tipo de cosas parece menor, pero puede sumarse rápidamente en una mesa grande.

Eso debería ser suficiente para empezar.