如何消除PostgreSQL查询
我不经常编写原始SQL,但在最近这样做时,我忍不住认为这个查询不是很枯燥。有没有办法收紧这个如何消除PostgreSQL查询,sql,postgresql,datetime,count,sql-order-by,Sql,Postgresql,Datetime,Count,Sql Order By,我不经常编写原始SQL,但在最近这样做时,我忍不住认为这个查询不是很枯燥。有没有办法收紧这个 SELECT COUNT(*) as "Users", DATE_TRUNC('day', created_at) AS "Date" FROM users WHERE created_at > now() - interval '1 year' GROUP BY DATE_TRUNC('day', created_at) ORDER BY DATE
SELECT
COUNT(*) as "Users", DATE_TRUNC('day', created_at) AS "Date"
FROM
users
WHERE created_at > now() - interval '1 year'
GROUP BY DATE_TRUNC('day', created_at)
ORDER BY DATE_TRUNC('day', created_at);
目前,该报告返回:
Users Date
175 2019-10-01 00:00:00
54 2019-10-02 00:00:00
142 2019-10-03 00:00:00
...
我想要的是将所有新用户按创建日期分组,但只能追溯到一年前(或我们选择的任意日期)。不确定DATE\u TRUNC
是否是最好的方法。更确切地说,重复3次可能不正确。date\u trunc()
是将时间戳截断为日期的正确工具。另一种选择是投球。对于group by
和order by
子句,可以使用位置参数或列别名
因此:
注:
- 我调整了
子句,使其在整天内进行过滤where
- 我使用了不带引号的标识符;引用标识符一开始就不是干巴巴的,它还使它们区分大小写
date\u trunc()
是将时间戳截断为日期的正确工具。另一种选择是投球。对于group by
和order by
子句,可以使用位置参数或列别名
因此:
注:
- 我调整了
子句,使其在整天内进行过滤where
- 我使用了不带引号的标识符;引用标识符一开始就不是干巴巴的,它还使它们区分大小写
分组依据
和排序依据
中使用列别名
SELECT
count(*) as "Users",
date_trunc('day', created_at) AS "Date"
FROM
users
WHERE
created_at > now() - interval '1 year'
GROUP BY "Date"
ORDER BY "Date"
您可以在
分组依据
和排序依据
中使用列别名
SELECT
count(*) as "Users",
date_trunc('day', created_at) AS "Date"
FROM
users
WHERE
created_at > now() - interval '1 year'
GROUP BY "Date"
ORDER BY "Date"