Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memudahkan Agregat Lajur dengan Penapis Berbeza dalam PostgreSQL?

Bagaimanakah Saya Boleh Memudahkan Agregat Lajur dengan Penapis Berbeza dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2025-01-22 17:26:10
asal
884 orang telah melayarinya

How Can I Simplify Aggregating Columns with Distinct Filters in PostgreSQL?

Memperkemas Pengagregatan Lajur dengan Penapis Berbeza dalam PostgreSQL

Kod berikut mengagregatkan data daripada berbilang jadual, menggunakan penapis yang berbeza untuk mengkategorikan permainan yang dimainkan, dimenangi dan kalah. Walaupun berfungsi, kerumitan dan panjangnya memerlukan pendekatan yang lebih cekap. Artikel ini meneroka kaedah yang lebih mudah.

Memanfaatkan Klausa FILTER (PostgreSQL 9.4 dan lebih baru)

PostgreSQL 9.4 dan versi seterusnya menawarkan klausa SQL FILTER standard, membolehkan penapisan dinamik dalam pengagregatan. Ini dengan ketara memudahkan pertanyaan:

<code class="language-sql">SELECT u.name,
       COUNT(*) FILTER (WHERE g.winner_id > 0) AS played,
       COUNT(*) FILTER (WHERE g.winner_id = u.id) AS won,
       COUNT(*) FILTER (WHERE g.winner_id <> u.id) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Salin selepas log masuk

Alternatif untuk Versi PostgreSQL Lama

Untuk versi sebelum PostgreSQL 9.4, penyelesaian menggunakan ungkapan Boolean dalam fungsi agregat tersedia:

<code class="language-sql">SELECT u.name,
       COUNT(g.winner_id > 0 OR NULL) AS played,
       COUNT(g.winner_id = u.id OR NULL) AS won,
       COUNT(g.winner_id <> u.id OR NULL) AS lost
FROM games g
JOIN users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP BY u.name;</code>
Salin selepas log masuk

Kaedah ini, walaupun kurang cekap daripada klausa FILTER, menawarkan penyelesaian praktikal untuk pemasangan PostgreSQL yang lebih lama.

Ringkasan

Menggunakan klausa FILTER (PostgreSQL 9.4 ) atau penyelesaian Boolean menyediakan penyelesaian yang lebih ringkas dan, dalam kebanyakan kes, penyelesaian berprestasi. Klausa FILTER ialah pendekatan pilihan untuk versi yang lebih baharu kerana kebolehbacaan dan kecekapannya yang lebih baik. Untuk versi yang lebih lama, penyelesaian Boolean kekal sebagai alternatif yang berdaya maju.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memudahkan Agregat Lajur dengan Penapis Berbeza dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan