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

Bagaimana cara alami bergabung dengan dua kueri dengan klausa?

Anda terlalu rumit. Anda tidak perlu bergabung dengan kedua kueri tersebut (dan harus benar-benar menjauhi alami bergabung), Anda hanya perlu menggabungkannya. min() dan max() dapat digunakan di dalam kueri yang sama, tidak perlu menjalankan dua kueri untuk mengevaluasi keduanya.

Anda juga tidak perlu menyarangkan definisi CTE, Anda cukup menulis satu demi satu.

Jadi seperti ini:

with quant_table as (
  select month, prod, sum(quant) as sum_q
  from sales 
  group by month, prod
), min_max as (
  select month, max(sum_q) as max_q, min(sum_q) as min_q
  from quant_table 
  group by month 
)
select t1.* 
from quant_table t1
  join min_max t2 
    on t2.month = t1.month 
   and t1.sum_q in (t2.min_q, t2.max_q)
order by month, prod;

Kondisi and t1.sum_q in (t2.min_q, t2.max_q) bisa juga ditulis sebagai and (t2.max_q = t1.sum_q or t2.min_q = t1.sum_q) .

Hal di atas selanjutnya dapat disederhanakan dengan menggabungkan group by dengan fungsi jendela dan lakukan penghitungan jumlah, min, dan maks dalam satu kueri:

with min_max as (
  select month, prod, 
         sum(quant) as sum_q,
         max(sum(quant)) over (partition by month) as max_q,
         min(sum(quant)) over (partition by month) as min_q
  from sales 
  group by month, prod
)
select month, prod, sum_q
from min_max
where sum_q in (max_q, min_q)
order by month, prod;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql gem install pg 0.18.4 lolos, bundle install gagal

  2. Apa itu LEFT JOIN di PostgreSQL

  3. Bagaimana cara memodifikasi atau menghapus objek JSON tertentu dari array JSON yang disimpan dalam tipe kolom jsonb di PostgreSQL menggunakan klausa where?

  4. Menghapus acara yang sebagian/sepenuhnya tumpang tindih dengan stempel waktu mulai dan berakhir di beberapa nilai

  5. SQL:Bagaimana cara menyimpan pesanan dalam kueri sql?