Saya memainkan permainan bola basket yang memungkinkan untuk mengeluarkan statistiknya sebagai file basis data, jadi orang dapat menghitung statistik dari itu yang tidak diterapkan dalam permainan. Sejauh ini saya tidak punya masalah menghitung statistik yang saya inginkan, tetapi sekarang saya mengalami masalah: menghitung jumlah ganda ganda dan / atau tiga kali lipat ganda yang dibuat seorang pemain selama musim ini dari statistik permainannya.
Definisi ganda ganda dan ganda ganda adalah sebagai berikut:
Ganda-ganda:
Double-double didefinisikan sebagai kinerja di mana pemain mengakumulasi total angka dua digit dalam dua dari lima kategori statistik — poin, rebound, assist, mencuri, dan tembakan yang diblokir — dalam sebuah game.
Triple-double:
Triple-double didefinisikan sebagai kinerja di mana pemain mengakumulasi total angka dua digit dalam tiga dari lima kategori statistik — poin, rebound, assist, steal, dan tembakan yang diblokir — dalam sebuah permainan.
Quadruple-double (ditambahkan untuk klarifikasi)
Quadruple-double didefinisikan sebagai kinerja di mana pemain mengakumulasi total angka dua digit dalam empat dari lima kategori statistik — poin, rebound, assist, steal, dan tembakan yang diblokir — dalam sebuah permainan.
Tabel "PlayerGameStats" menyimpan statistik untuk setiap permainan yang dimainkan pemain dan terlihat sebagai berikut:
CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES
( 1, 1, 1, 'Nuggets', 'Cavaliers', 6, 8, 2, 2, 0 ),
( 2, 1, 2, 'Nuggets', 'Clippers', 15, 7, 0, 1, 3 ),
( 3, 1, 6, 'Nuggets', 'Trailblazers', 11, 11, 1, 2, 1 ),
( 4, 1, 10, 'Nuggets', 'Mavericks', 8, 10, 2, 2, 12 ),
( 5, 1, 11, 'Nuggets', 'Knicks', 23, 12, 1, 0, 0 ),
( 6, 1, 12, 'Nuggets', 'Jazz', 8, 8, 11, 1, 0 ),
( 7, 1, 13, 'Nuggets', 'Suns', 7, 11, 2, 2, 1 ),
( 8, 1, 14, 'Nuggets', 'Kings', 10, 15, 0, 3, 1 ),
( 9, 1, 15, 'Nuggets', 'Kings', 9, 7, 5, 0, 4 ),
(10, 1, 17, 'Nuggets', 'Thunder', 13, 10, 10, 1, 0 )
) AS t(id,player_id,seasonday,team,opponent,points,rebounds,assists,steals,blocks);
Output yang ingin saya capai terlihat seperti ini:
| player_id | team | doubleDoubles | tripleDoubles |
|-----------|---------|---------------|---------------|
| 1 | Nuggets | 4 | 1 |
Satu-satunya solusi yang saya temukan sejauh ini sangat mengerikan sehingga membuat saya muntah ...; o) ... Sepertinya ini:
SELECT
player_id,
team,
SUM(CASE WHEN(points >= 10 AND rebounds >= 10) OR
(points >= 10 AND assists >= 10) OR
(points >= 10 AND steals >= 10)
THEN 1
ELSE 0
END) AS doubleDoubles
FROM PlayerGameStats
GROUP BY player_id
... dan sekarang Anda mungkin juga muntah (atau tertawa keras) setelah membaca ini. Saya bahkan tidak menulis semua yang diperlukan untuk mendapatkan semua kombinasi ganda ganda, dan menghilangkan pernyataan kasus untuk triple ganda karena itu bahkan lebih konyol.
Apakah ada cara yang lebih baik untuk melakukan ini? Baik dengan struktur tabel yang saya miliki atau dengan struktur tabel baru (saya bisa menulis skrip untuk mengonversi tabel).
Saya dapat menggunakan MySQL 5.5 atau PostgreSQL 9.2.
Berikut ini tautan ke SqlFiddle dengan contoh data dan solusi mengerikan yang saya posting di atas: http://sqlfiddle.com/#!2/af6101/3
Perhatikan bahwa saya tidak benar-benar tertarik pada quadruple-doubles (lihat di atas) karena mereka tidak terjadi dalam permainan yang saya mainkan sejauh yang saya tahu, tetapi itu akan menjadi nilai tambah jika kueri mudah diperluas dengan tanpa banyak menulis ulang ke akun untuk quadruple-dobel.