sql >> Databasteknik >  >> RDS >> Mysql

behöver hjälp med att lägga till kolumn i en tabell med en funktion som gör aritmetiska operationer mellan kolumner från två separata tabeller

Vi börjar med att rensa upp frågan. Du bör alltid försöka utföra dina beräkningar över varje rad när det är möjligt istället för att utföra flera vertikala underfrågor, eftersom detta undviker att DBMS gör flera övergångar över samma tabell.

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;

Förutsatt att jag inte har släppt ett kommatecken någonstans kommer detta att returnera en kolumn woba för varje år för den angivna startkannan.

Observera att jag har gått med i tabellerna på e.year_id istället för SUBSTRING(e.game_ID,4,4); detta undviker omkostnader för att anropa SUBSTRING() på varje skiva. Den här typen av saker verkar mindre, men det kan snabbt lägga sig över ett stort bord.

Det borde räcka för att du ska komma igång.




  1. Varför kan du inte överföra MYSQL-funktioner till förberedda PDO-satser?

  2. 4 sätt att skilja timmar, minuter och sekunder från ett tidsvärde i MariaDB

  3. PHP Object Property har parenteser i sig

  4. Mysql liknande textsökning