【问题标题】:PostgreSQL - How to use window function to pull the max value from a columnPostgreSQL - 如何使用窗口函数从列中提取最大值
【发布时间】:2019-01-04 00:51:09
【问题描述】:

我是初学者,因此对于简单/非技术性的术语,请提前致歉。

我有一个表格,其中每一行都显示公司名称、日/月/年,以及他们当天收到的访问次数。我的目标是显示 2018 年 1 月访问次数最多的公司。

我能够使用以下查询找到每家公司在 2018 年 1 月获得的访问次数:

select to_char(datecolumn,'Mon') as monthkey, extract(year from datecolumn) as yearkey, companyname, sum(visits) as sumvisits
from t1
where monthkey = 'Jan' and yearkey = '2018'
group by monthkey, yearkey, companyname
order by companyname

现在我需要使用窗口函数来找到一月份的最大访问量以及相应的公司,但是我卡住了。

我试过按月分区:

select companyname, monthkey, max(sumvisits) over (partition by monthkey) as maxvisits
from (select to_char(f_date,'Mon') as monthkey, extract(year from f_date) as yearkey, companyname, sum(visits) as sumvisits
from t1
where monthkey = 'Jan' and yearkey = '2018'
group by monthkey, yearkey, dealername
order by companyname)

但是这个查询只是给了我一家公司的最大访问量,并为每家公司列出了它。

我认为我不应该使用限制函数或类似的东西,因为查询需要适用于多个月。

我想看看:

monthkey yearkey companyname sumvisits
Jan      2018    ABCInc     5000

有人可以帮助建议我做错了什么/指出我正确的方向吗?

【问题讨论】:

    标签: sql postgresql subquery window-functions


    【解决方案1】:

    只需使用order bylimit

    select to_char(datecolumn,'Mon') as monthkey, extract(year from datecolumn) as yearkey, companyname, 
           sum(visits) as sumvisits
    from t1
    where monthkey = 'Jan' and yearkey = '2018'
    group by monthkey, yearkey, companyname
    order by sumvisits desc
    limit 1;
    

    【讨论】:

    • 我不能使用限制,因为这也需要几个月的时间
    • @Meeko 。 . .只能回答你问的问题,而这个显然是一个月左右。如果您有其他问题,请将其作为问题提出。
    • 在我最初的问题中,我注意到它需要适用于多个月,但我也可以提出一个新问题。谢谢!
    • @Meeko 。 . .通过更改where 子句,这适用于您喜欢的任何月份。因此,它回答了您提出的问题。
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多