#sql #postgresql
#sql #postgresql
Вопрос:
Я пытаюсь реализовать подкачку, при которой он получает последний профиль с определенным электронным письмом, которое не было проверено. Я не понимаю, почему этот запрос завершается с ошибкой
столбец «profile.email» должен отображаться в предложении GROUP BY или использоваться в агрегатной функции
select distinct ON (email) email, count(*)
from "profile" where "verified" = false
order by "email" asc, "created_date" asc limit 1
но это работает
select distinct ON (email) email, *
from "profile" where "verified" = false
order by "email" asc, "created_date" asc limit 10
Есть ли у меня какой-нибудь способ решить эту проблему без использования подзапросов?
Редактировать
После некоторого тестирования данный ответ не представляется правильным.
select distinct ON (email) email, count(*) over()
from "profile"
where "email" = 'example@test.com'
order by "email" desc, "created_date" desc limit 1
возвращает (неверно)
[{email: ‘example@test.com ‘,количество:18 }]
select distinct ON (email) email
from "profile"
where "email" = 'example@test.com'
order by "email" desc, "created_date" desc limit 10
возвращает (правильно)
[{email: ‘example@test.com ‘}]
Комментарии:
1. У меня нет решения. Данный ответ был неверным.
Ответ №1:
Вы можете использовать оконную функцию:
select distinct ON (email) email, count(*) over ()
from "profile"
where "verified" = false
order by "email" asc, "created_date" asc
limit 1
Для этого примера я не знаю, какое преимущество это имеет перед:
select email, count(*) over ()
from "profile"
where "verified" = false
order by "created_date" asc
limit 1
Комментарии:
1. Что касается вашего второго запроса. Будет ли это работать, если ограничение больше 1?
2. @als9xd . . . Нет, но это не тот вопрос, который вы задали.
3. Извините, я обновил его. Мне нужно большее ограничение для разбивки на страницы. Также я использую это в обобщенной функции, где иногда мне не нужно получать distinct on, и подойдет обычный
count()
. Есть ли существенное влияние на производительность, если использовать это вместо allcounts()
, даже если они этого строго не требуют?4. Я провел некоторое тестирование, и я думаю, что ваш запрос неверен. Я обновил свой вопрос результатами.