Правильный синтаксис GROUP BY - PullRequest
1 голос
/ 16 февраля 2012

Я довольно хорошо разбираюсь в 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 ]

5 голосов
/ 16 февраля 2012

Проблема с неукрашенными 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 голос
/ 16 февраля 2012

«open_date» отсутствует в вашем списке выбора, «date (open_date)» есть.

Любой из этих вариантов будет работать:

порядок по дате (open_date)

упорядочить по 1

Вы также можете назвать свои столбцы в операторе select, а затем сослаться на этот псевдоним:

select date (open_date) "alias"... order by alias

В некоторых базах данных требуется ключевое слово AS перед псевдонимом в выбранном вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...