【问题标题】:Find max per id after counting and grouping在计数和分组后找到每个 id 的最大值
【发布时间】:2017-06-20 13:27:11
【问题描述】:

在我的表格中,我有乘坐不同网络的巴士——每条记录代表一次乘坐。

我的目标是找出每天每个网络中的最大乘车次数以及最大乘车次数发生的那一天 - 这需要首先计算每个网络中每天的乘车次数网络,然后取每个网络的最大计数 - 最后我将有三列 -

YMD - max_count- network_id

我尝试使用下面的查询,但不确定在何处或如何包含 max() 函数。有什么建议么?

SELECT DISTINCT ON (network_id)
           network_id, count(*), to_char(start_time, 'YYYY-MM-DD') as YMD
    FROM   routes
    ORDER  BY network_id, count DESC, YMD;

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    我会使用聚合查询来计算一天的乘车次数,然后使用窗口 rank 调用来查找乘车次数最多的日期:

    SELECT network_id, cnt, ymd
    FROM   (SELECT network_id, 
                   ymd,
                   cnt, 
                   RANK() OVER (PARTITION BY network_id ORDER BY cnt DESC) AS rk
            FROM   (SELECT network_id, 
                           TO_CHAR(start_time, 'YYYY-MM-DD') AS ymd, 
                           COUNT(*) AS cnt
                    FROM   routes
                    GROUP BY network_id, TO_CHAR(start_time, 'YYYY-MM-DD') 
                   ) t
           ) s
    WHERE  rk = 1
    

    【讨论】:

    • 谢谢,但这会引发错误:ERROR: syntax error at or near "t"
    • @the_darkside 我在那里错过了),谢谢。编辑了我的答案以解决问题。
    猜你喜欢
    • 2022-10-05
    • 2021-05-23
    • 2013-10-24
    • 2018-12-24
    • 2018-03-12
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多