正确的GROUP BY语法

时间:2012-02-16 18:57:14

标签: postgresql

我非常精通mySQL和MSSQL,但我刚开始使用postgres。我确信这是一个简单的问题,所以要简短一点:

SQL error:

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

In statement:
SELECT date(open_date), COUNT(*)
FROM incidents
GROUP BY 1
ORDER BY open_date

open_date的类型为timestamp with time zone,如果我使用GROUP BY date(open_date),我会得到相同的结果。

我已尝试在线浏览postgres文档和一些示例,但似乎所有内容都表明这应该是有效的。

2 个答案:

答案 0 :(得分:5)

问题在于open_date子句中未经修饰的ORDER BY

这应该这样做:

  SELECT date(open_date), COUNT(*)
    FROM incidents
GROUP BY date(open_date)
ORDER BY date(open_date);

这也可行(尽管出于维护原因,我不想使用整数来引用列):

  SELECT date(open_date), COUNT(*)
    FROM incidents
GROUP BY 1
ORDER BY 1;

答案 1 :(得分:1)

“open_date”不在您的选择列表中,“date(open_date)”是。

其中任何一个都可行:

  

按日期排序(open_date)

     

按1排序

您还可以在select语句中命名列,然后引用该别名:

  

选择日期(open_date)“alias”...按别名排序

某些数据库在select中的别名之前需要关键字AS。

相关问题