sql >> データベース >  >> RDS >> Mysql

2つの別々のテーブルの列間で算術演算を行う関数を使用して1つのテーブルに列を追加するのに助けが必要

    クエリをクリーンアップすることから始めます。可能な場合は、複数の垂直サブクエリを実行するのではなく、可能な場合は常に各行で計算を実行するようにしてください。これにより、DBMSが同じテーブルに対して複数のパスを実行することが回避されます。

    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;
    

    どこかにコンマをドロップしていないと仮定すると、これは列wobaを返します。 指定された先発投手のために毎年。

    e.year_idのテーブルに参加したことに注意してください SUBSTRING(e.game_ID,4,4)の代わりに;これにより、SUBSTRING()を呼び出すオーバーヘッドが回避されます。 各レコードに。この種のことは些細なことのように思えますが、大きなテーブルではすぐに足し合わされる可能性があります。

    始めるにはそれで十分です。




    1. MySQLで多対多の関係で選択する

    2. #1111-グループ関数の使用が無効です

    3. PHPmysql文字セットutf8の問題

    4. 使用量にカウントを設定