简体   繁体   中英

Find max value for each year

I have a question that is asking:

-List the max sales for each year?

I think I have the starter query but I can't figure out how to get all the years in my answer:

SELECT TO_CHAR(stockdate,'YYYY') AS year, sales
FROM sample_newbooks
WHERE sales = (SELECT MAX(sales) FROM sample_newbooks);

This query gives me the year with the max sales. I need max sales for EACH year. Thanks for your help!

Use group by and max if all you need is year and max sales of the year.

select 
    to_char(stockdate, 'yyyy') year,
    max(sales) sales
from sample_newbooks
group by to_char(stockdate, 'yyyy')

If you need rows with all the columns with max sales for the year, you can use window function row_number:

select
    *
from (
    select
        t.*,
        row_number() over (partition by to_char(stockdate, 'yyyy') order by sales desc) rn
    from sample_newbooks t
) t where rn = 1;

If you want to get the rows with ties on sales, use rank :

select
    *
from (
    select
        t.*,
        rank() over (partition by to_char(stockdate, 'yyyy') order by sales desc) rn
    from sample_newbooks t
) t where rn = 1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM