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

Cách sử dụng hàm cửa sổ SQL để tính phần trăm tổng hợp

Tôi nghĩ bạn đang tìm kiếm điều này:

SELECT d1, d2, sum(v)/sum(sum(v)) OVER (PARTITION BY d1) AS share
FROM   test
GROUP  BY d1, d2;

Tạo ra kết quả được yêu cầu.

Các chức năng của cửa sổ được áp dụng sau Chức năng tổng hợp. sum() bên ngoài trong sum(sum(v)) OVER ... là một chức năng cửa sổ (đính kèm OVER ... mệnh đề) trong khi sum() bên trong là một hàm tổng hợp.

Hiệu quả giống như:

WITH x AS (
   SELECT d1, d2, sum(v) AS sv
   FROM   test
   GROUP  BY d1, d2
   )
SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM   x;

Hoặc (không có CTE):

SELECT d1, d2, sv/sum(sv) OVER (PARTITION BY d1) AS share
FROM  (
   SELECT d1, d2, sum(v) AS sv
   FROM   test
   GROUP  BY d1, d2
   ) x;

Hoặc biến thể của @ Mu.

Bên cạnh:Greenplum đã giới thiệu các truy vấn con tương quan với phiên bản 4.2. Xem ghi chú phát hành.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails 5 form_for với mảng hộp kiểm

  2. Cách tránh chèn nhiều trong PostgreSQL

  3. Làm thế nào để chuyển đổi khoảng thời gian như 1 ngày 01:30:00 thành 25:30:00?

  4. Có vấn đề về hiệu suất khi lưu trữ tệp trong PostgreSQL không?

  5. pg_stat_activity không cập nhật trong một thủ tục hoặc giao dịch