Home > other >  How can I select 12 months with highest value?
How can I select 12 months with highest value?

Time:01-08

I've got a problem with SQL query to make a chart in Python.

I want to make 12 rows for each month with highest value of deaths. Table look like this:

enter image description here

And the values are for each month from 2021.

I am at this moment

Table one:

Year MonthName total_deaths
2021 grudzień 5436581
2021 grudzień 5429544
2021 grudzień 5422092
2021 grudzień 5414213
2021 grudzień 5406818
2021 grudzień 5392790
2021 grudzień 5386664
2021 grudzień 5377197

Grudzień is December, and there are values for all of the months.

Expected output:

MonthName total_deaths
January MAX value of deaths
February MAX value of deaths
March MAX value of deaths
April MAX value of deaths
May MAX value of deaths
June MAX value of deaths
July MAX value of deaths
August MAX value of deaths
September MAX value of deaths
October MAX value of deaths
November MAX value of deaths
December MAX value of deaths

What I have tried

SELECT 
t.Year,t.MonthName,d.total_deaths
FROM dbo.Dim_time as t
INNER JOIN dbo.Deaths as d on t.ID_Date = d.ID_Date
where t.Year=2021
order by total_deaths DESC

And don't know how to select it.

CodePudding user response:

I did this:

SELECT t.MonthName, MAX(total_deaths) as total_deaths
 from dbo.Deaths as d 
inner join dbo.Dim_time as t on d.ID_Date = t.ID_Date 
where t.Year = 2021 
GROUP BY MonthName 
order by total_deaths asc

And it looks like this:

MonthName total_deaths
styczeń 2216314
luty 2530716
marzec 2815659
kwiecień 3180238
maj 3550000
czerwiec 3947020
lipiec 4217383
sierpień 4519157
wrzesień 4782941
październik 4999871
listopad 5215558
grudzień 5436581

CodePudding user response:

I am guessing that you want from each year, from each month, the highest total_Deaths ?

If that is correct then you need a simple group by

declare @one table (year int, monthname varchar(50), total_deaths int)
insert into @one values (2021, 'december', 10), 
                        (2021, 'december', 20), 
                        (2021, 'december', 30),
                        (2021, 'november', 40), 
                        (2021, 'november', 60), 
                        (2021, 'november', 50),
                        (2020, 'december', 15), 
                        (2020, 'december', 25), 
                        (2020, 'december', 35)

select one.year, one.Monthname, max(one.total_deaths) as total_deaths 
from   @one one
group by one.year, one.Monthname

the result is

year    Monthname   total_deaths
2020    december    35
2021    december    30
2021    november    60
  •  Tags:  
  • Related