172 похожих чатов

Есть две таблицы. Для примера я максимально упростил их. Первая юзеры

c датой регистрации
users(uuid uuid, regdate date, email text)
Вторая - движение денег между юзерами в разных валютах. USD, EUR
transactions(currency text, amount numeric, debet_code uuid, credit_code uuid)

Нужен запрос отдающий количество регистраций по дням, с суммами по дебету и кредиту тех юзеров, что в тот день зарегистрировались. Со списком самих юзеров
"day","registrations", "debet_usd", "debet_eur", "credit_usd", "credit_eur”, “users_list”

У меня получилось так.

with deb as (
select debet_code as user_uuid,
currency,
sum(amount) as amount
from transactions
group by 1, 2
),
cred as (
select credit_code as user_uuid,
currency,
sum(amount) as amount
from transactions
group by 1, 2
)
select u.regdate as day,
count(1) as registrations,
sum( (select amount from deb
where user_uuid = u.uuid and currency='USD' ) ) as debet_usd,
sum( (select amount from deb
where user_uuid = u.uuid and currency='EUR' ) ) as debet_eur,
sum( (select amount from cred
where user_uuid = u.uuid and currency='USD' ) ) as credit_usd,
sum( (select amount from cred
where user_uuid = u.uuid and currency='EUR' ) ) as credit_usd,
jsonb_agg(u.uuid) as users_list
from users
group by 1;

Но мне не нравится, что тут четыре подзапроса для каждой строки.
Как это написать лучше?

2 ответов

11 просмотров

С кофеварки разглядеть сложно, но это точно плохой запрос? Он медленный или еще чего?..

Первая реакция: sum( (select amount from deb where user_uuid = u.uuid and currency='USD' ) ) as debet_usd заменить на case when deb.currency = 'USD' then sum(deb.amount) end case;

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта