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

Mysql...Permintaan yang tidak mungkin?

Bukan tidak mungkin, hanya berbelit-belit. Anda dapat menggunakan STR_TO_DATE untuk mengubah string Anda menjadi DATETIME objek, dari mana Anda kemudian dapat menggunakan MONTH untuk mendapatkan nomor bulan. Perhatikan (seperti komentar @DRapp) bahwa Anda harus menyimpan DATETIME nilai dalam bentuk aslinya, bukan sebagai VARCHAR , maka Anda tidak perlu berurusan dengan STR_TO_DATE . Setelah mendapatkan nomor bulan, Anda kemudian dapat menggunakan agregasi bersyarat untuk mendapatkan hasil yang Anda inginkan:

SELECT name,
       COALESCE(AVG(CASE WHEN mth = 1 THEN PTS END), 0) AS Jan,
       COALESCE(AVG(CASE WHEN mth = 2 THEN PTS END), 0) AS Feb,
       COALESCE(AVG(CASE WHEN mth = 3 THEN PTS END), 0) AS Mar,
       COALESCE(AVG(CASE WHEN mth = 4 THEN PTS END), 0) AS Apr,
       -- repeat for May to November
       COALESCE(AVG(CASE WHEN mth = 12 THEN PTS END), 0) AS `Dec`,
       AVG(PTS) AS AVG
FROM (
  SELECT name, PTS AS PTS, MONTH(STR_TO_DATE(DATE, '%a %b %e %H:%i:%s %Y')) AS mth
  FROM data
) d
GROUP BY name

Output (untuk data sampel Anda):

name    Jan     Feb     Mar     Apr     Dec     AVG
Chris   0       4       0       2       0       3
John    0       0       0       2.6667  0       2.6667

Demo di SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Waktu Mulai Eksekusi Acara Mysql

  2. Mengapa Java tidak dapat terhubung ke MySQL 5.7 setelah pembaruan JDK terbaru dan bagaimana cara memperbaikinya? (ssl.SSLHandshakeException:Tidak ada protokol yang sesuai)

  3. Mencari skrip pagination php/mysql tingkat lanjut

  4. Mysql:Mengoptimalkan menemukan simpul super di pohon set bersarang

  5. Seberapa besar database MySQL dapat diperoleh sebelum kinerja mulai menurun