Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

butuh bantuan menambahkan kolom ke satu tabel menggunakan fungsi yang melakukan operasi aritmatika antara kolom dari dua tabel terpisah

Kami akan mulai dengan membersihkan kueri. Anda harus selalu mencoba melakukan perhitungan di setiap baris bila memungkinkan daripada melakukan beberapa subkueri vertikal, karena ini menghindari DBMS membuat banyak lintasan pada tabel yang sama.

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;

Dengan asumsi saya belum menjatuhkan koma di suatu tempat, ini akan mengembalikan kolom woba untuk setiap tahun untuk pelempar awal yang ditentukan.

Perhatikan bahwa saya telah bergabung dengan tabel di e.year_id bukannya SUBSTRING(e.game_ID,4,4); ini menghindari overhead pemanggilan SUBSTRING() pada setiap catatan. Hal semacam ini tampaknya kecil, tetapi dapat bertambah dengan cepat di atas meja besar.

Itu sudah cukup untuk membantu Anda memulai.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan 1005 di MySQL (dari sintaks kunci asing?)

  2. Indeks MySQL - apa praktik terbaiknya?

  3. #1025 - Kesalahan saat mengganti nama (errno:150) di mysql

  4. Apa perbedaan antara utf8_unicode_ci dan utf8_unicode_520_ci

  5. Mendapatkan perbedaan antara jumlah dua subquery