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

Chia giá trị cố định cho các quốc gia dựa trên chia sẻ doanh thu hàng ngày

Khi mới bắt đầu:truy vấn currenet của bạn không thực hiện những gì bạn muốn. Có vẻ như bạn thực sự cần tổng cửa sổ hàng tháng trên fix_costs . Vì vậy, tôi sẽ bắt đầu từ:

select 
    sales_date, 
    country, 
    sum(sales_volume),
    sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
        / day(last_day(sales_date)) 
        as fix_cost_per_day
from sales
group by 1,2;

Điều này dẫn đến:

sales_date | country | sum(sales_volume) | fix_cost_per_day
:--------- | :------ | ----------------: | ---------------:
2020-01-03 | DE      |               500 |          64.5161
2020-01-03 | FR      |               350 |          64.5161
2020-01-03 | NL      |               320 |          64.5161
2020-01-30 | None    |                 0 |          64.5161
2020-02-15 | DE      |               700 |         172.4138
2020-02-15 | FR      |               180 |         172.4138
2020-02-15 | NL      |               420 |         172.4138
2020-02-29 | None    |                 0 |         172.4138
2020-03-27 | DE      |               180 |         129.0323
2020-03-27 | FR      |               970 |         129.0323
2020-03-27 | NL      |               670 |         129.0323
2020-03-31 | None    |                 0 |         129.0323

Từ đó, bạn có thể thêm logic có tính đến "chia sẻ doanh thu hàng ngày trên mỗi quốc gia". Theo tôi hiểu câu hỏi của bạn, đó là:

select 
    sales_date, 
    country, 
    sum(sales_volume),
    sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
        / day(last_day(sales_date)) 
        * sum(sales_volume)
        / sum(sum(sales_volume)) over(partition by sales_date)
        as fix_cost_per_day
from sales
group by 1,2;

Lợi nhuận:

sales_date | country | sum(sales_volume) | fix_cost_per_day
:--------- | :------ | ----------------: | ---------------:
2020-01-03 | DE      |               500 |      27.57099531
2020-01-03 | FR      |               350 |      19.29969672
2020-01-03 | NL      |               320 |      17.64543700
2020-01-30 | None    |                 0 |             null
2020-02-15 | DE      |               700 |      92.83819629
2020-02-15 | FR      |               180 |      23.87267905
2020-02-15 | NL      |               420 |      55.70291777
2020-02-29 | None    |                 0 |             null
2020-03-27 | DE      |               180 |      12.76143212
2020-03-27 | FR      |               970 |      68.76993974
2020-03-27 | NL      |               670 |      47.50088621
2020-03-31 | None    |                 0 |             null

Bản trình diễn trên DB Fiddle

Nếu cần, Bạn có thể xóa các bản ghi cho quốc gia 'None' bằng cách chuyển truy vấn thành truy vấn con và lọc trong truy vấn bên ngoài.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đạt kỷ lục mỗi tháng nhưng cũng nhận về 0 nếu không có kỷ lục nào trong tháng đó

  2. Có cách nào để sử dụng các đối tượng json trong SQL không

  3. Chuyển đổi bảng từ MyISAM sang INNODB

  4. Di chuyển KnexJS với dữ liệu hạt giống được liên kết

  5. Cách đặt lại mật khẩu người dùng gốc MySQL