Postgres:如何计算具有范围条件的记录?



使用带有列的表:

  • (PK)sales_log_id
  • user_id
  • created_at

使用sales_log_id来表示用户的事务活动。

我已经能够查询有多少用户拥有 x 数量的交易。

现在我想找出有多少用户在一定时间内> 10 和 <20 笔交易。

作为数据库和 Postgres 的新手,我了解到您可以使用上一个结果(子查询)进行查询和另一个查询。因此,我尝试首先查询 6 月份有多少用户<30 笔交易,然后查询用户> 10 笔交易的结果。

SELECT COUNT(DISTINCT t.user_id) usercounter
FROM (
SELECT user_id, created_at, sales_log_id
FROM sales_log 
WHERE created_at BETWEEN 
'2019-06-01' AND '2019-06-30' 
GROUP BY user_id, created_at, sales_log_id 
HAVING COUNT (sales_log_id) <30
)t
GROUP BY t.user_id
HAVING COUNT (t.sales_log.id) >10;

但它产生了一个错误

ERROR:  missing FROM-clause entry for table "sales_log"
LINE 11: HAVING COUNT (t.sales_log.id) >10;
^
SQL state: 42P01
Character: 359

任何人都可以提供正确的方法来做到这一点吗?

我认为它就像

SELECT count(*)
FROM (
SELECT user_id, COUNT(*)
FROM sales_log
WHERE created_at BETWEEN '2019-06-01' AND '2019-06-30'
GROUP BY user_id
HAVING COUNT (sales_log_id) BETWEEN 11 AND 29
) AS q;

仅当您确实需要时才向查询添加DISTINCT。 这只是一个词,但它可能会有很大的性能损失。

最新更新