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

Gán tổng giá trị của tháng cho từng ngày trong tháng

bản trình diễn:db <> fiddle

SELECT
    s1.sales_date,
    s1.country,
    s1.sales_volume,
    s2.fix_costs
FROM sales s1
JOIN sales s2 ON s1.country <> 'None' AND s2.country = 'None' 
    AND date_trunc('month', s1.sales_date) = date_trunc('month', s2.sales_date)

Bạn cần một sự tham gia tự nhiên. Điều kiện tham gia là:

  1. Bảng đầu tiên không có None bản ghi (s1.country <> 'None' )
  2. Bảng thứ hai chỉ None bản ghi (s2.country = 'None' )
  3. Ngày:Chỉ xem xét phần năm và tháng, bỏ qua ngày. Điều này có thể đạt được bằng cách chuẩn hóa ngày của cả hai bảng thành ngày đầu tiên của tháng bằng cách sử dụng date_trunc() . Vì vậy, v.d. '2020-02-15' kết quả là '2020-02-01''2020-02-29' kết quả là '2020-02-01' quá trình so sánh và điều kiện tham gia cũng hoạt động hiệu quả.

Ngoài ra :

SELECT
    *
FROM (
    SELECT
        sales_date,
        country,
        sales_volume,
        SUM(fix_costs) OVER (PARTITION BY date_trunc('month', sales_date)) as fix_costs
    FROM sales 
) s
WHERE country <> 'None'

Bạn có thể sử dụng SUM() chức năng cửa sổ trên nhóm date_trunc() như đã mô tả ở trên. Sau đó, bạn cần lọc None hồ sơ sau đó



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất thứ tự mệnh đề WHERE và JOIN

  2. giá trị khóa trùng lặp vi phạm ràng buộc duy nhất - lỗi postgres khi cố gắng tạo bảng sql từ khung dữ liệu dask

  3. Điều gì xác định nếu rails bao gồm id::serial trong một định nghĩa bảng?

  4. Làm thế nào để xử lý giao dịch phân tán trong postgresql?

  5. Tạo hoặc thay thế các postgres kích hoạt