sql >> データベース >  >> RDS >> Mysql

毎日の収益分配に基づいて国に修正値を分割する

    手始めとして:あなたのcurrenetクエリはあなたが望むことをしません。 fix_costsの月間ウィンドウ合計が実際に必要なようです 。だから私はから始めます:

    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;
    

    これにより、次のようになります。

    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
    

    そこから、「国ごとの1日の収益分配」を考慮したロジックを追加できます。私があなたの質問を理解しているように、それは:

    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;
    

    返品:

    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
    

    DBフィドルのデモ

    必要に応じて、国'None'のレコードを削除できます クエリをサブクエリに変換し、外部クエリでフィルタリングします。



    1. PostgreSQLJSON列をHibernateエンティティプロパティにマッピングする

    2. SQLクエリで素数を出力する

    3. Laravel4カスケードソフト削除

    4. MySQLでニュースレターのデータベースを設計するためのガイド