.distinct()\
.where(
(minimal_datetime <= PollData.answer_time) & (PollData.answer_time <= datetime.datetime.now())
)
result = len((await s.exec(q)).all())
сделал вот так, осталась проблемка в том что не могу нормально посчитать количество полученных строк запросом sql. Подсчет через len() конечно работает, но получать ради этого все записи так себе удовольствие
Как можно нормально подсчитать если func.count() не могу сюда никак впихнуть?
ну вот выше был пример с count()
я кажется не понимаю как работает distinct, но этот запрос выдает мне 3 вместо 2 (я хочу получить кол-во уникальных значений user_tg_id с данным where условием), но в итоге мне выдает просто количество записей, что я не так делаю? спасибо за помощь!)
он буквально посчитал числа (одно число) и убрал дубли
я все еще не понимаю, откуда 3 взялось. Если из запроса убрать func.count() и вместо него просто поставить PollData.user_tg_id то запрос выдаст как раз два айди, которые подходят под запрос. Но func.count() как будто что-то не то считает
почему он посчитал одно число?
а сколько чисел он должен посчитать? у тебя группировки нет
хм. точно два или 2 с дисктинктом?
запрос с дистинктом возвращает 2 значения, запрос func.count() с дистинктом возвращает 3. Как будто бы дистинкт применяется не к user_tg_id, а к полю по которому идёт отбор в where
Так у тебя дистинкт применяется к результату каунта сейчас
блин, а как правильно то тогда? прикол в том что питоновский len() отрабатывает значительно быстрее чем func.count()
ну пока у меня там два значения в бд, это так. на около 0.005 s быстрее было вроде)
я бы скопировал и поправил, но увы
вот то что было тогда, я сейчас пытаюсь перестроить но алхимия меня каждый раз обламывает) https://gist.github.com/kindaway/b7471dfb6d12e78071787522f2369b48
Обсуждают сегодня