使用带有列的表:
使用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
任何人都可以提供正确的方法吗?
答案 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
添加到查询中。
这只是一个字,但可能会带来很大的性能损失。