sql >> Databáze >  >> RDS >> Mysql

potřebujete pomoc s přidáním sloupce do jedné tabulky pomocí funkce, která provádí aritmetické operace mezi sloupci ze dvou samostatných tabulek

Začneme vyčištěním dotazu. Vždy byste se měli snažit provádět výpočty napříč každým řádkem, je-li to možné, spíše než provádět více vertikálních dílčích dotazů, protože to zabrání tomu, aby DBMS prováděl více průchodů přes stejnou tabulku.

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;

Za předpokladu, že jsem někde neupustil čárku, vrátí to sloupec woba za každý rok pro konkrétního počátečního nadhazovače.

Všimněte si, že jsem připojil tabulky na e.year_id místo SUBSTRING(e.game_ID,4,4); tím se vyhnete režii volání SUBSTRING() na každém záznamu. Něco takového se zdá být zanedbatelné, ale u velkého stolu se to může rychle sčítat.

To by vám mělo stačit, abyste mohli začít.




  1. Jak uniknout % v Knex kde se mi líbí dotaz?

  2. Vybrat data mezi dvěma daty vylučují některé dny

  3. PHP asynchronní mysql-query

  4. php čtení bitového pole mysql vrací podivný znak