sql >> Database teknologi >  >> RDS >> Mysql

Ekskluder visse værdier, når du opdeler en fast værdi til lande baseret på en daglig indtægtsandel

Du kan bruge case udtryk, både omkring beregningen og indenfor vinduet 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 :

salgsdato | land | sum(salgsvolumen) | fix_cost_per_day:--------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 37.950664142020-01-03 | FR | 350 | 26.565464902020-01-03 | NL | 320 | null 30-01-2020 | Ingen | 0 | null 2020-02-15 | DE | 700 | 137.147335422020-02-15 | FR | 180 | 35.266457682020-02-15 | NL | 420 | null 29-02-2020 | Ingen | 0 | null 2020-03-27 | DE | 180 | 20.196353442020-03-27 | FR | 970 | 108.835904632020-03-27 | NL | 670 | null 31-03-2020 | Ingen | 0 | null

  1. Tilføjelse af et indledende nul til nogle værdier i kolonne i MySQL

  2. Forskellen mellem BYTE og CHAR i kolonnedatatyper

  3. SQL-syntaksfejl ved brug af UPDATE-databaseforespørgsel

  4. Kald en lagret procedure fra DECLARE-sætningen, når du bruger markører i MySQL