Sql &引用;列必须出现在GROUP BY子句中;在时间戳上使用日期时

Sql &引用;列必须出现在GROUP BY子句中;在时间戳上使用日期时,sql,postgresql,Sql,Postgresql,我有一个SQL查询,它统计具有给定创建日期的联系人。创建日期以毫秒为单位存储为unix时间戳,我正在使用to_timestamp方法正确格式化它: SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date" FROM "contacts" GROUP BY "contacts"."createdate

我有一个SQL查询,它统计具有给定创建日期的联系人。创建日期以毫秒为单位存储为unix时间戳,我正在使用
to_timestamp
方法正确格式化它:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY "contacts"."createdate"
ORDER BY "contacts"."createdate" ASC
结果如下:

Count | Create Date
-----------------------------------------
1     | Sunday, February 1, 2015 12:00 AM
1     | Sunday, February 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY "contacts"."createdate" ASC
我想按月对它们进行分组,因此对于上面的示例,我希望:

Count | Create Date
-----------------------------------------
2     | February 2015
3     | April 2015
我将SQL更改为以下内容:

Count | Create Date
-----------------------------------------
1     | Sunday, February 1, 2015 12:00 AM
1     | Sunday, February 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
1     | Wednesday, April 1, 2015 12:00 AM
SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY "contacts"."createdate" ASC
但收到一个错误:

ERROR: column "contacts.createdate" must appear in the GROUP BY clause or be used in an aggregate function

有什么方法可以正确执行吗?

您可以参考“按编号选择”中的元素:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY 2 ASC

您可以参考“按编号选择”中的元素:

SELECT count(*) AS "Count", date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000)) AS "Create Date"
FROM "contacts"
GROUP BY date_trunc('month', to_timestamp("contacts"."createdate"::double precision / 1000))
ORDER BY 2 ASC

这是因为按“联系人”排序的
,“createdate”ASC
这是因为按“联系人”排序的
,“createdate”ASC
或更简单的
按2个ASC排序的分组工作,谢谢@l-o-van-ingen!有关于如何以“月YYYY”格式显示的提示吗?当使用
to_char(时间戳,'Month YYYY')
时,我在postgresql文档中得到:-2015年4月-2016年4月-2017年4月-2015年5月-2016年5月等检查。它甚至可能是一个合适的
to_char
可以让你摆脱当前的
日期。。。类似于
选择count(*)作为“count”,将_char(“contacts”,“createdate”,“Month YYYY”)作为“Create Date”
…或者更简单的
按2个订单分组,按2个asc
工作,谢谢@l-o-van-ingen!有关于如何以“月YYYY”格式显示的提示吗?当使用
to_char(时间戳,'Month YYYY')
时,我在postgresql文档中得到:-2015年4月-2016年4月-2017年4月-2015年5月-2016年5月等检查。它甚至可能是一个合适的
to_char
可以让你摆脱当前的
日期。。。类似于
选择count(*)作为“count”,选择_char(“contacts”,“createdate”,“Month YYYY”)作为“Create Date”
。。。