sql >> Databasteknik >  >> RDS >> Mysql

Uteslut vissa värden när du delar upp ett fast värde till länder baserat på en daglig intäktsandel

Du kan använda case uttryck, både runt beräkningen och inom fönstret sum :

select 
    sales_date, 
    country, 
    sum(sales_volume),
    case when country <> 'NL'
        then sum(sum(fix_costs)) over(partition by year(sales_date), month(sales_date))
            / day(last_day(sales_date)) 
            * sum(sales_volume)
            / sum(case when country <> 'NL' then sum(sales_volume) else 0 end) over(partition by sales_date)
    else 0
    end as fix_cost_per_day
from sales
group by 1,2;
 

Demo på DB Fiddle :

försäljningsdatum | land | summa(försäljningsvolym) | fix_kostnad_per_dag:--------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 37.950664142020-01-03 | FR | 350 | 26.565464902020-01-03 | NL | 320 | null 2020-01-30 | Inga | 0 | null 2020-02-15 | DE | 700 | 137.147335422020-02-15 | FR | 180 | 35.266457682020-02-15 | NL | 420 | null 2020-02-29 | Inga | 0 | null 2020-03-27 | DE | 180 | 20.196353442020-03-27 | FR | 970 | 108.835904632020-03-27 | NL | 670 | null 2020-03-31 | Inga | 0 | null

  1. Konfigurationsparameter work_mem i PostgreSQL på Linux

  2. Hur man escaper <,> och &tecken till html-enheter i Oracle PL/SQL

  3. Hur FIELD() fungerar i MariaDB

  4. Att förstå Postgres radstorlekar