ошибка: столбец «месяц» не существует в запросе PG

#sql #postgresql #group-by

#sql #postgresql #группировка по

Вопрос:

Мой запрос PG:

 SELECT "Tracks"."PageId", 
       date_trunc("month", "Tracks"."createdAt") AS month, 
       count(*) 
FROM "Tracks" 
WHERE "Tracks"."PageId" IN (29,30,31) 
GROUP BY month, "Tracks"."PageId"
  

и моя схема:

id, createdAt, updatedAt, PageId

Немного смущен тем, почему я получаю эту ошибку!

Ответ №1:

Вы можете использовать псевдоним в предложении where или group by . Вам нужно повторить выражение:

 SELECT "Tracks"."PageId", 
       date_trunc('month', "Tracks"."createdAt") AS month, 
       count(*) 
FROM "Tracks" 
WHERE "Tracks"."PageId" IN (29,30,31) 
GROUP BY date_trunc('month', "Tracks"."createdAt"), "Tracks"."PageId";
  

Обратите внимание, что первым параметром для date_trunc() является varchar значение, поэтому его нужно заключать в одинарные, а не двойные кавычки.


Если вы не хотите повторять выражение, вы можете поместить его в производную таблицу:

 select "PageId", month, count(*)
from (
    SELECT "Tracks"."PageId", 
           date_trunc('month', "Tracks"."createdAt") AS month
    FROM "Tracks" 
    WHERE "Tracks"."PageId" IN (29,30,31) 
) t
group by month, "PageId";
  

Не связано, но: вам действительно следует избегать идентификаторов в кавычках. С ними гораздо больше проблем, чем они того стоят

Комментарии:

1. Спасибо! Для моего собственного изучения и разъяснения причина, по которой это не удалось, заключалась в том, что у меня был месяц в двойных кавычках, а не в одинарных кавычках?