Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Podziel stałą wartość na kraje na podstawie dziennego udziału w przychodach

Na początek:twoje bieżące zapytanie nie robi tego, czego chcesz. Wygląda na to, że faktycznie potrzebujesz miesięcznej sumy okien na fix_costs . Zacząłbym więc od:

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;
 

To daje:

data_sprzedaży | kraj | suma(wielkość_sprzedaży) | fix_cost_per_day:--------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 64.51612020-01-03 | FR | 350 | 64.51612020-01-03 | Holandia | 320 | 64.51612020-01-30 | Brak | 0 | 64.51612020-02-15 | DE | 700 | 172.41382020-02-15 | FR | 180 | 172.41382020-02-15 | Holandia | 420 | 172.41382020-02-29 | Brak | 0 | 172.41382020-03-27 | DE | 180 | 129.03232020-03-27 | FR | 970 | 129.03232020-03-27 | Holandia | 670 | 129.03232020-03-31 | Brak | 0 | 129.0323

Od tego momentu możesz dodać logikę, która uwzględnia „udział w dziennych przychodach na kraj”. Jak rozumiem Twoje pytanie, to znaczy:

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;
 

Zwroty:

data_sprzedaży | kraj | suma(wielkość_sprzedaży) | fix_cost_per_day:--------- | :------ | ----------------:| ---------------:2020-01-03 | DE | 500 | 27.570995312020-01-03 | FR | 350 | 19.299696722020-01-03 | Holandia | 320 | 17.645437002020-01-30 | Brak | 0 | brak 2020-02-15 | DE | 700 | 92.838196292020-02-15 | FR | 180 | 23.872679052020-02-15 | Holandia | 420 | 55.7029177772020-02-29 | Brak | 0 | brak 2020-03-27 | DE | 180 | 12.761432122020-03-27 | FR | 970 | 68.769939742020-03-27 | Holandia | 670 | 47.500886212020-03-31 | Brak | 0 | brak

Demo na DB Fiddle

W razie potrzeby możesz usunąć rekordy dla kraju 'None' zmieniając zapytanie w podzapytanie i filtrując w zapytaniu zewnętrznym.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica MySql między dwoma znacznikami czasu w dniach?

  2. Data w UTC w mysql

  3. Python łączy się z bazą danych MySQL za pomocą złącza MySQL i przykładu PyMySQL

  4. Wybieranie losowych wierszy w MySQL

  5. Wielojęzyczne tytuły kategorii w bazie danych Mysql