sql >> Database >  >> RDS >> Mysql

hulp nodig bij het toevoegen van een kolom aan één tabel met behulp van een functie die rekenkundige bewerkingen uitvoert tussen kolommen uit twee afzonderlijke tabellen

We beginnen met het opschonen van de query. U moet altijd proberen uw berekeningen indien mogelijk voor elke rij uit te voeren in plaats van meerdere verticale subquery's uit te voeren, omdat dit voorkomt dat het DBMS meerdere passages over dezelfde tabel maakt.

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;

Ervan uitgaande dat ik nergens een komma heb geplaatst, zal dit een kolom woba . opleveren voor elk jaar voor de opgegeven startende werper.

Merk op dat ik me heb aangesloten bij de tabellen op e.year_id in plaats van SUBSTRING(e.game_ID,4,4); dit vermijdt de overhead van het aanroepen van SUBSTRING() op elke plaat. Dit soort dingen lijkt klein, maar het kan snel oplopen aan een grote tafel.

Dat zou genoeg moeten zijn om u op weg te helpen.




  1. SQL MAAK TABEL voor beginners

  2. Ongeldige SQL-fout in kolomnaam

  3. Fout met tekens in een html-iframe

  4. Een overzicht van cluster-naar-clusterreplicatie