Похожие чаты

Подскажите, как тут получить не поля, а количество записей? query =

(
select(
Advice.id,
Advice.dt,
Advice.with_recommendations,
AdvicePurposeVariety,
AdvicingAlgorithmVariety,
AdvicePurposeVariety,
AdviceReactionVariety,
EventVariety.name,
)
.distinct(Advice.id)
.where(and_(*filters_to_apply))
.outerjoin(AdvicePurposeVariety)
.outerjoin(AdviceReaction)
.outerjoin(AdviceReactionVariety)
.outerjoin(AdviceContext)
.outerjoin(AdvicingAlgorithmVariety)
.outerjoin(AdviceEvent)
.outerjoin(Event)
.outerjoin(EventVariety)
)
Такой вариант даёт ошибку
query = (
select(
func.count()
)
.distinct(Advice.id)
.where(and_(*filters_to_apply))
.outerjoin(AdvicePurposeVariety)
.outerjoin(AdviceReaction)
.outerjoin(AdviceReactionVariety)
.outerjoin(AdviceContext)
.outerjoin(AdvicingAlgorithmVariety)
.outerjoin(AdviceEvent)
.outerjoin(Event)
.outerjoin(EventVariety)
)
В первом запросе sql такой:
SELECT
DISTINCT ON (technological_section_1.advices.id) technological_section_1.advices.id,
....
Что бы получить кол-во надо, что бы было так
SELECT
count(DISTINCT technological_section_1.advices.id)
...

14 ответов

36 просмотров

там нужно делать select_from

Ручей-Виноградов Автор вопроса
Ilya Lyapin (Nestyreff)
там нужно делать select_from

так? query = ( select(func.count()).select_from() .distinct(Advice.id) .where(and_(*filters_to_apply)) .outerjoin(AdvicePurposeVariety) .outerjoin(AdviceReaction) .outerjoin(AdviceReactionVariety) .outerjoin(AdviceContext) .outerjoin(AdvicingAlgorithmVariety) .outerjoin(AdviceEvent) .outerjoin(Event) .outerjoin(EventVariety) )

Ручей-Виноградов Автор вопроса
Tishka17
ну укажи из чего селектить

query = ( select(func.count()).select_from( select() .distinct(Advice.id) .where(and_(*filters_to_apply)) .outerjoin(AdvicePurposeVariety) .outerjoin(AdviceReaction) .outerjoin(AdviceReactionVariety) .outerjoin(AdviceContext) .outerjoin(AdvicingAlgorithmVariety) .outerjoin(AdviceEvent) .outerjoin(Event) .outerjoin(EventVariety) ) ) Вроде так, по идеи, но тоже ошибка

Ручей Виноградов
query = ( select(func.count()).select_from( ...

select_from(…) в скобках то что у тебя было в этом запросе: select( Advice.id, Advice.dt, Advice.with_recommendations, AdvicePurposeVariety, AdvicingAlgorithmVariety, AdvicePurposeVariety, AdviceReactionVariety, EventVariety.name, )

Ручей-Виноградов Автор вопроса
Tishka17
на SQL как пишется селект?

SELECT count(DISTINCT technological_section_1.advices.id) FROM technological_section_1.advices -- LEFT OUTER JOIN common.advice_purpose_varieties ON common.advice_purpose_varieties.id = technological_section_1.advices.purpose_variety_id LEFT OUTER JOIN technological_section_1.advice_reactions ON technological_section_1.advices.id = technological_section_1.advice_reactions.advice_id -- LEFT OUTER JOIN common.advice_reaction_varieties ON common.advice_reaction_varieties.id = technological_section_1.advice_reactions.variety_id LEFT OUTER JOIN technological_section_1.advice_contexts ON technological_section_1.advices.id = technological_section_1.advice_contexts.advice_id -- LEFT OUTER JOIN common.advising_algorithm_varieties ON common.advising_algorithm_varieties.id = technological_section_1.advice_contexts.advising_algorithm_variety_id LEFT OUTER JOIN technological_section_1.advice_events ON technological_section_1.advices.id = technological_section_1.advice_events.advice_id LEFT OUTER JOIN technological_section_1.events ON technological_section_1.events.id = technological_section_1.advice_events.event_id LEFT OUTER JOIN common.event_varieties ON common.event_varieties.id = technological_section_1.events.variety_id WHERE technological_section_1.advices.dt >= '2023-05-05 00:00:00' AND technological_section_1.advices.dt <= '2023-05-06 00:00:00' AND technological_section_1.advices.purpose_variety_id = 1 AND technological_section_1.advice_reactions.variety_id = 1 AND technological_section_1.advice_contexts.advising_algorithm_variety_id = 1 AND technological_section_1.advices.with_recommendations = true

Ручей Виноградов
SELECT count(DISTINCT technological_section_1.advi...

вон from видишь =) его и передавай в select_from

Ручей-Виноградов Автор вопроса
Tishka17
вон from видишь =) его и передавай в select_from

query = ( select(func.count()).select_from( select(distinct(Advice.id)) .where(and_(*filters_to_apply)) .outerjoin(AdvicePurposeVariety) .outerjoin(AdviceReaction) .outerjoin(AdviceReactionVariety) .outerjoin(AdviceContext) .outerjoin(AdvicingAlgorithmVariety) .outerjoin(AdviceEvent) .outerjoin(Event) .outerjoin(EventVariety) ) ) Вот как надо, т.е. в селект вставить distinct(Advice.id)

Ручей Виноградов
query = ( select(func.count())...

это работает несколько не так как исходный запрос

Ручей-Виноградов Автор вопроса
Tishka17
это работает несколько не так как исходный запрос

это создаёт вот такой запрос SELECT count(*) AS count_1 FROM ( SELECT DISTINCT technological_section_1.advices.id AS anon_2 FROM technological_section_1.advices LEFT OUTER JOIN common.advice_purpose_varieties ON common.advice_purpose_varieties.id = technological_section_1.advices.purpose_variety_id LEFT OUTER JOIN technological_section_1.advice_reactions ON technological_section_1.advices.id = technological_section_1.advice_reactions.advice_id LEFT OUTER JOIN common.advice_reaction_varieties ON common.advice_reaction_varieties.id = technological_section_1.advice_reactions.variety_id LEFT OUTER JOIN technological_section_1.advice_contexts ON technological_section_1.advices.id = technological_section_1.advice_contexts.advice_id LEFT OUTER JOIN common.advising_algorithm_varieties ON common.advising_algorithm_varieties.id = technological_section_1.advice_contexts.advising_algorithm_variety_id LEFT OUTER JOIN technological_section_1.advice_events ON technological_section_1.advices.id = technological_section_1.advice_events.advice_id LEFT OUTER JOIN technological_section_1.events ON technological_section_1.events.id = technological_section_1.advice_events.event_id LEFT OUTER JOIN common.event_varieties ON common.event_varieties.id = technological_section_1.events.variety_id ) AS anon_1

Похожие вопросы

Обсуждают сегодня

"Since pnut can flip FTM easily, I'm swapping my FTM to pnut and hoping for a easy x5-x10" Perfect recipe for disaster. NFA but chances are, you'll end up as exit liquidity ...
C. A.
7
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
28
Добрый день, подскажите, пожалуйста, по проблеме. Сегодня на работе утром обнаружилось что по рдп подключиться не получается к серверу 2022. В серверную зашел - на системно...
srv
19
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
Welcome Mary Clark to the Pirate Chain chat Matey ☠️ PIRATE CHAIN is a cryptocurrency for private anonymous transactions. Official website https://piratechain.com ⚠️ Beware...
Rose
1
Ребят, где можно найти ЕБИлд последней версии Budgie DE? Или нет такого?
HyperWin
13
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
10
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта