#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. Спасибо! Для моего собственного изучения и разъяснения причина, по которой это не удалось, заключалась в том, что у меня был месяц в двойных кавычках, а не в одинарных кавычках?