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

SQL Server - agregasi bersyarat dengan korelasi

Ada solusi yang lebih mudah:

SELECT c.Customer, c."User", c."Revenue",
       1.0 * Revenue/ NULLIF(c2.sum_total, 0) AS percentage,
       1.0 * c2.sum_running / NULLIF(c2.sum_total, 0) AS running_percentage
FROM t c CROSS APPLY
     (SELECT SUM(c2.Revenue) AS sum_total,
             SUM(CASE WHEN c2.Revenue >= x.Revenue THEN c2.Revenue ELSE 0 END) 
                 as sum_running
      FROM t c2 CROSS JOIN
           (SELECT c.REVENUE) x
      WHERE c."User" = c2."User"
     ) c2
ORDER BY "User", Revenue DESC;

Saya tidak yakin mengapa atau apakah batasan ini ada dalam standar SQL '92. Saya telah mengingatnya dengan cukup baik sekitar 20 tahun yang lalu, tetapi saya tidak mengingat batasan khusus itu.

Saya harus mencatat:

  • Pada saat standar SQL 92, penggabungan lateral tidak benar-benar diperhatikan. Sybase jelas tidak memiliki konsep seperti itu.
  • Basis data lain lakukan memiliki masalah dengan referensi luar. Secara khusus, mereka sering membatasi pelingkupan hingga satu tingkat saja.
  • Standar SQL itu sendiri cenderung sangat politis (yaitu, didorong oleh vendor) daripada didorong oleh kebutuhan pengguna basis data yang sebenarnya. Nah, seiring waktu, ia bergerak ke arah yang benar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meningkatkan kinerja ORDER BY pada jsonb cross join dengan inner join group by

  2. Menggunakan sqldf dan RPostgreSQL bersama-sama

  3. Bagaimana cara mendapatkan objek json sebagai kolom di postgresql?

  4. Menggunakan Replikasi Logis PostgreSQL untuk Mempertahankan Server TEST Baca/Tulis yang Selalu Terkini

  5. Bagaimana cara meneruskan rahasia DB AWS ke dalam konteks Tomcat.xml?