PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Apakah semua kelompok memiliki kekuatan total yang sama untuk subkelompok yang diberikan?

Baca pertanyaan dengan seksama

Dan:

Poin penting untuk kinerja adalah mengecualikan baris yang tidak relevan lebih awal dan hanya menghitung agregat untuk subgrup tertentu . Kemudian (dengan asumsi lebih dari beberapa subgrup berbeda), indeks pada (subgroup) dapat membantu:

CREATE INDEX ON foo (subgroup);

Setiap kueri berikut menampilkan FALSE jika setidaknya dua grup memiliki jumlah total yang berbeda untuk subgrup yang diberikan, dan TRUE di semua kasus lain (dengan pengecualian kecil untuk kueri 5, lihat di bawah).

Kueri 1

SELECT count(DISTINCT total_power) = 1
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_B'  -- exclude irrelevant rows early!
   GROUP  BY grp
   ) sub;

Kueri 2

SELECT count(*) = 1
FROM  (
   SELECT true
   FROM  (
      SELECT sum(power) AS total_power
      FROM   foo
      WHERE  subgroup = 'Sub_C'
      GROUP  BY grp
      ) sub2
   GROUP  BY total_power
   ) sub2;

Kueri 3

SELECT count(*) OVER () = 1
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub
GROUP  BY total_power
LIMIT  1;

Kueri 4

(
SELECT FALSE
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub
GROUP  BY total_power
OFFSET 1
LIMIT  1
)
UNION ALL
SELECT TRUE
LIMIT 1;

Yang ini spesial. Jawaban terkait dengan penjelasan:

Kueri 5

SELECT min(total_power) = max(total_power)  -- can fail for NULL values
FROM  (
   SELECT sum(power) AS total_power
   FROM   foo
   WHERE  subgroup = 'Sub_A'
   GROUP  BY grp
   ) sub;

Yang terakhir bisa gagal jika NULL nilai dalam kekuasaan diperbolehkan. (Tetapi Anda harus menentukan hasil yang diharapkan dalam kasus ini.)

Saya menjalankan pengujian ekstensif dan menemukan semua kueri berkinerja hampir sama dalam kondisi ideal:

db<>fiddle di sini

Kueri 5 cenderung sedikit lebih cepat daripada yang lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan dengan cepat di dekat pengguna menggunakan PostGIS

  2. Dapatkan daftar semua tabel yang digunakan dalam kueri SELECT Postgresql

  3. Alternatif pgAdmin - ClusterControl GUI Manajemen Database PostgreSQL

  4. Cara Mengonversi String ke Tanggal di PostgreSQL

  5. Postgres insert atau update trigger WHEN condition (lama)