Решение SQL-запросов для получения статистики из моих таблиц

Я пытался получить статистику из своих таблиц. Ниже я попытался нарисовать структуру своей таблицы: Решение SQL-запросов для получения статистики из моих таблиц

В приведенном выше примере у меня есть таблица Сделка, в которой каждая транзакция записывается для каждого пользователя Профиль (profile_id). Кроме того, я записываю дату создания транзакции pub_date, Тип операции (варианты типа показаны в кружке) и транзакцию количество. При создании транзакции я даю Бонус каждой транзакции с соответствующим Профиль (profile_id).

Итак, я хочу получить статистику из приведенных выше таблиц в пределах диапазона дат. Точнее:

  1. Общая транзакция сумма суммы каждой транзакции профиля в пределах диапазона дат с Тип операции из ОТЗЫВАТЬ и WITHDRAW_MANUAL.
  2. Общая транзакция сумма суммы каждой транзакции профиля в пределах диапазона дат с Тип операции из ДЕПОЗИТ и DEPOSIT_MANUAL.
  3. Общий бонус сумма суммы каждой транзакции профиля в пределах диапазона дат.

Визуально я хочу такой результат. Решение SQL-запросов для получения статистики из моих таблиц

Здесь выбранный диапазон дат означает, что я дам запросу период Дата начала и Дата окончания.

Удалось решить 1. и 2.. Но я не смог найти способ (для 3.) к СУММ суммы БОНУС каждого профиля в пределах диапазона дат. Мое решение следующее:

 SELECT  mtd.profile_id, sum(mtd.amount) AS summa_deposit, 
  (
        SELECT sum(mtw.amount) AS summa_withdraw
        FROM public.main_transaction AS mtw 
        WHERE mtw.profile_id=mtd.profile_id AND mtw.pub_date>='2017-01-01' AND mtw.pub_date<='2017-10-01' AND mtw.transaction_type IN ('WITHDRAW','WITHDRAW_MANUAL')
    )
FROM public.main_transaction AS mtd
WHERE mtd.pub_date>='2017-01-01' AND mtd.pub_date<='2017-10-01' AND mtd.transaction_type IN ('DEPOSIT','DEPOSIT_MANUAL') 
GROUP BY  mtd.profile_id
ORDER BY mtd.profile_id;

Получить общую сумму бонуса каждого профиля здесь не проблема. Проблема в том, чтобы получить эту сумму в пределах диапазон дат. Потому что я не записываю дату в свою таблицу Бонус. У меня только свои ID транзакции и profile_id

P.S. моя таблица находится в PostGreSQL.

Примеры данных (и, возможно, SQL Fiddle!) Действительно помогут.

Gordon Linoff 26.07.2018 12:36
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам просто нужен еще один join в подзапросе?

(SELECT SUM(b.amount) AS summa_bonus
 FROM public.bonus b JOIN
      public.main_transaction mtw 
      ON b.transaction_id = mtw.id
 WHERE mtw.profile_id = mtd.profile_id AND
       mtw.pub_date >= '2017-01-01' AND
       mtw.pub_date <= '2017-10-01' AND
       mtw.transaction_type IN ('WITHDRAW', 'WITHDRAW_MANUAL')
)

Не знаю, нужен ли фильтр на transaction_type.

Спасибо за помощь. Да здесь transaction_type ненужная. Но актуальность есть. Это еще одна проблема, с которой я могу справиться. :)

mr.sanatbek 26.07.2018 13:06

Другие вопросы по теме