选择具有某些条件的计数

tim*_*one 5 postgresql aggregate postgresql-9.4

使用 Postgres 9.4,我有一个page_views包含一page列的表。我想选择所有不同的页面并在它们之前进行计数并按降序对它们进行排序。我还希望在过去 24 小时内最少计数 20。所以它看起来像这样:

120 / home
 56 / about
 24 / locations
Run Code Online (Sandbox Code Playgroud)

我刚在想:

select count(*),page from page_views group by page where count(*) > 20;
Run Code Online (Sandbox Code Playgroud)

但这不起作用。这该怎么做?

Erw*_*ter 3

不清楚您想要的是总计数还是过去 24 小时内的计数。对于后者:

SELECT count(*), page
FROM   page_views
GROUP  BY 2
WHERE  created_at >= now() - interval '24 hours' -- guessing column
HAVING count(*) > 20
ORDER  BY 1 DESC;
Run Code Online (Sandbox Code Playgroud)

该条件count(*) > 20必须写入HAVING子句中。

您没有提供表定义。猜测您有一个created_at来存储事件时间。

总计数,但仅适用于过去 24 小时内计数至少为 20 的页面:

SELECT count(*), page
FROM  (  
    SELECT page
    FROM   page_views
    GROUP  BY 1
    WHERE  created_at >= now() - interval '24 hours'
    HAVING count(*) > 20
    ) x
JOIN   page_views p USING (page)
GROUP  BY 2
ORDER  BY 1 DESC;
Run Code Online (Sandbox Code Playgroud)