【问题标题】:How do I write a query to find highest earning day per quarter?如何编写查询以查找每个季度的最高收入日?
【发布时间】:2022-10-21 06:16:42
【问题描述】:

我需要编写 SQL 查询来提取 2018 年每个季度的某个品牌的最高收入单日。我有以下内容,但它没有拉单日 - 它每天拉最高收入。

select distinct quarter, order_event_date, max(gc) as highest_day_gc
from (
    select sum(commission) as cm, order_date,
        extract(quarter from order__date) as quarter
    from order_table
    where advertiser_id ='123'
    and event_year='2018'
    group by 3,2
)
group by 1,2
order by 2 DESC

【问题讨论】:

  • 如果您的子查询中没有表别名,这甚至都行不通。而且您不能按序数值分组,即使可以,也不应该这样做。

标签: sql


【解决方案1】:

您可以使用窗口函数通过rank() 查找每个季度的最高收入日。

select rank() over (partition by quarter order by gc desc) as rank, quarter, order_event_date, gc
from (select sum(gross_commission) gc,
             order_event_date,
             extract(quarter from order_event_date) quarter
      from order_aggregation
      where advertiser_id = '123'
        and event_year = '2018'
      group by order_event_date, quarter) a

您可以将上面的查询创建为看法并使用where rank = 1 对其进行过滤。

【讨论】:

    【解决方案2】:

    您可以在句末添加 LIMIT 子句。此外,将 las ORDER BY 子句更改为 ORDER BY highest_day_gc。就像是:

    SELECT DISTINCT quarter
                   ,order_event_date
                   ,max(gc) as highest_day_gc
    FROM    (SELECT sum(gross_commission) as gc
                   ,order_event_date
                   ,extract(quarter from order_event_date) as quarter
             FROM order_aggregation
             WHERE advertiser_id ='123'
                   AND event_year='2018'
             GROUP BY 3,2) as subquery
    GROUP BY 1,2
    ORDER BY 3 DESC
    LIMIT 1 
    

    【讨论】:

    • 如果我只需要 1 个季度,我可以使用它,但我需要 4 个季度中每个季度的最高值
    • 然后你可能需要使用窗口函数。窗口函数有助于在您的排序中进行分区。答案之一已经提出了最常见的窗口函数之一:rank() 函数。
    猜你喜欢
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2021-12-22
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多