我有一个带有created
时间戳和id
标识符的表。
我可以通过以下方式获得每周唯一id
的数量:
SELECT date_trunc('week', created)::date AS week, count(distinct id)
FROM my_table
GROUP BY week ORDER BY week;
现在,我想按每周唯一的created
来累积id
的数量,就像这样:
SELECT date_trunc('week', created)::date AS week, count(distinct id),
(SELECT count(distinct id)
FROM my_table
WHERE date_trunc('week', created)::date <= week) as acc
FROM my_table
GROUP BY week ORDER BY week;
但这不起作用,因为无法在子选择(week
)中访问ERROR: column "week" does not exist
。
我该如何解决?
我正在使用PostgreSQL
答案 0 :(得分:2)
使用累积聚合。但是,我认为您不需要distinct
,所以:
SELECT date_trunc('week', created)::date AS week, count(*) as cnt,
SUM(COUNT(*)) OVER (ORDER BY MIN(created)) as running_cnt
FROM my_table
GROUP BY week
ORDER BY week;
在任何情况下,如您所说的那样,您可以将cnt
更改为使用count(distinct)
。您的子查询根本没有使用distinct
。
答案 1 :(得分:1)
CTE或临时表应该可以解决您的问题。这是使用CTE的示例。
WITH abc AS (
SELECT date_trunc('week', created)::date AS week, count(distinct id) as IDCount
FROM my_table
GROUP BY week ORDER BY week;
)
SELECT abc.week, abc.IDcount,
(SELECT count(*)
FROM my_table
WHERE date_trunc('week', created)::date <= adc.week) as acc
FROM abc
GROUP BY week ORDER BY abc.week;
希望这会有所帮助