如何消除PostgreSQL查询

如何消除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

我不经常编写原始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_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"