PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

SQL Server - tổng hợp có điều kiện với tương quan

Có một giải pháp dễ dàng hơn:

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;

Tôi không chắc tại sao hoặc liệu giới hạn này có nằm trong tiêu chuẩn SQL '92 hay không. Tôi đã ghi nhớ nó khá tốt cách đây 20 năm, nhưng tôi không nhớ lại giới hạn cụ thể đó.

Tôi cần lưu ý:

  • Vào thời điểm của tiêu chuẩn SQL 92, các phép nối bên không thực sự có trên radar. Sybase chắc chắn không có khái niệm như vậy.
  • Cơ sở dữ liệu khác do có vấn đề với các tham chiếu bên ngoài. Đặc biệt, họ thường giới hạn phạm vi sâu đến một mức.
  • Bản thân Tiêu chuẩn SQL có xu hướng mang tính chính trị cao (nghĩa là do nhà cung cấp điều khiển) hơn là do các yêu cầu thực tế của người dùng cơ sở dữ liệu. Theo thời gian, nó luôn đi đúng hướng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có bất kỳ cú pháp thoát nào cho biến psql bên trong các hàm PostgreSQL không?

  2. Làm cách nào để thực hiện các truy vấn khi kết nối DB trong Rails?

  3. Tìm kiếm toàn văn PG trên đường ray bằng cách sử dụng đá quý pg_search cho chuỗi con

  4. Làm cách nào để đặt tên thuộc tính chính xác thành kết quả tổng hợp json với mệnh đề GROUP BY?

  5. Truy vấn bỏ qua khoảng trắng