Rumah >pangkalan data >tutorial mysql >Bagaimana Menggunakan Fungsi Tetingkap dengan betul dengan GROUP BY dalam Postgres untuk Mengira Statistik Pengguna Terkumpul?
Fungsi Tetingkap Postgres dan Kumpulan Mengikut Pengecualian
Masalah
Pertanyaan sedang berusaha untuk mendapatkan semula statistik pengguna terkumpul dari semasa ke semasa, tetapi ia menghadapi ketidaktepatan. Apabila berbilang permainan wujud dalam acara, pertanyaan menghasilkan berbilang baris untuk pembayaran yang berbeza. Penyelesaian yang jelas untuk mengumpulkan mengikut ID acara gagal, menyebabkan ralat: "lajur "sp.payout" mesti muncul dalam klausa GROUP BY atau digunakan dalam fungsi agregat."
Penyelesaian
Ralat timbul kerana pertanyaan menggunakan fungsi tetingkap, yang mengagregat nilai setiap partition sambil mengekalkan semua baris, sebaliknya daripada fungsi agregat. Fungsi tetingkap memerlukan hujahnya untuk dimasukkan ke dalam klausa GROUP BY.
Untuk menyelesaikan isu, seseorang boleh menggabungkan fungsi tetingkap dan agregat seperti berikut:
SELECT p.name , e.event_id , e.date , sum(sum(sp.payout)) OVER w - sum(sum(s.buyin )) OVER w AS "Profit/Loss" FROM player p JOIN result r ON r.player_id = p.player_id JOIN game g ON g.game_id = r.game_id JOIN event e ON e.event_id = g.event_id JOIN structure s ON s.structure_id = g.structure_id JOIN structure_payout sp ON sp.structure_id = g.structure_id AND sp.position = r.position WHERE p.player_id = 17 GROUP BY e.event_id WINDOW w AS (ORDER BY e.date, e.event_id) ORDER BY e.date, e.event_id;
Penjelasan
Dalam pertanyaan ini, fungsi outer sum() ialah fungsi tetingkap yang mengira jumlah fungsi jumlah dalam (). Fungsi dalaman mengagregatkan pembayaran dan pembelian untuk setiap pemain dalam setiap acara. Hasilnya ialah satu baris bagi setiap pemain dan acara, memaparkan keuntungan atau kerugian terkumpul.
Pertimbangan Tambahan
Atas ialah kandungan terperinci Bagaimana Menggunakan Fungsi Tetingkap dengan betul dengan GROUP BY dalam Postgres untuk Mengira Statistik Pengguna Terkumpul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!