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)
但这不起作用。这该怎么做?
不清楚您想要的是总计数还是过去 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)