Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

precisa de ajuda para adicionar coluna a uma tabela usando a função que faz operações aritméticas entre colunas de duas tabelas separadas


Começaremos limpando a consulta. Você deve sempre tentar realizar seus cálculos em cada linha quando possível, em vez de realizar várias subconsultas verticais, pois isso evita que o DBMS faça várias passagens na mesma tabela.
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;

Supondo que eu não tenha soltado uma vírgula em algum lugar, isso retornará uma coluna woba para cada ano para o lançador inicial especificado.

Observe que juntei as tabelas em e.year_id em vez de SUBSTRING(e.game_ID,4,4); isso evita a sobrecarga de chamar SUBSTRING() em cada registro. Esse tipo de coisa parece menor, mas pode aumentar rapidamente em uma mesa grande.

Isso deve ser suficiente para você começar.