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

时间:2019-07-16 04:06:58

标签: postgresql

使用带有列的表:

  • (PK)sales_log_id
  • user_id
  • created_at

使用sales_log_id代表用户的交易活动。

我已经能够查询有多少用户进行了x笔交易。

现在我想找出有多少用户,例如。在一定时间内> 10 AND <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

任何人都可以提供正确的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为这很简单

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添加到查询中。 这只是一个字,但可能会带来很大的性能损失。