在计数和分组后查找每个id的最大值

时间:2017-06-20 05:02:43

标签: sql postgresql

在我的表格中,我有乘坐不同网络的公共汽车 - 每条记录代表一次。

我的目标是找到每个网络中一天所乘的最大游乐设施数以及最大游乐设施数发生的日期 - 这需要先计算每个游乐设施每天的游乐设施数量网络,然后采取每个网络的最大数量 - 最后我将有三列 -

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;

1 个答案:

答案 0 :(得分:0)

我会使用汇总查询来计算每天的游乐设施数量,然后通过窗口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