Объединение двух запросов с разными таблицами и предложения where - PullRequest
0 голосов
/ 20 марта 2020

У меня есть два запроса, которые мне нужно объединить. Я пытался использовать объединение и объединение, но ничего не работает. Например, если я сделаю подзапрос, мой итоговый столбец окажется только ОДНОМ единственным значением для всех строк. Я хочу, чтобы итоговый столбец имел разные значения (общее число идентификаторов, деленное на месяц). Принимая во внимание, что к активному столбцу применяются определенные условия, и он присоединяется к таблице daily_kpis (что приводит к меньшему количеству идентификаторов относительно общего столбца).

Каков наилучший способ их объединения? Кроме того, я использую postgresql.

Обновление: чтобы уточнить, я хочу знать общее количество идентификаторов за каждый месяц, а затем я только хочу видеть количество выбранных идентификаторов, которые были активны для этого. месяц. Они считаются активными, если найдены ставки на любую сумму (больше нуля). Мне понадобится таблица p для таблицы d, чтобы увидеть, сколько ID ставит деньги. Но для итогового столбца я НЕ хочу делать объединение, и я просто хочу увидеть общее количество идентификаторов за месяц в таблице p.

Query 1
SELECT date_part('month', signup_date) as month, count(DISTINCT(p.cage_player_id)) as active
FROM player_signup as p
JOIN daily_kpis as d ON d.cage_player_id = p.cage_player_id
WHERE slot_bet_amount > 0
OR ld_bet_amount > 0 
OR table_bet_amount > 0 
GROUP BY date_part('month', signup_date)
ORDER BY date_part('month', signup_date) ASC

Query 2
SELECT count(cage_player_id) as total
FROM player_signup
GROUP BY date_part('month', signup_date)
ORDER BY date_part('month', signup_date) ASC

Вот то, что каждый запрос дает мне в результате. Я просто хотел бы добавить итоговый столбец к месяцу и активный столбец.

Запрос 1 Запрос 1

Запрос 2 Запрос 2

1 Ответ

0 голосов
/ 20 марта 2020

Без фактических определений таблиц или выборочных данных с результатами я могу только надеяться, что понимаю, что вам нужно. Но если я правильно понимаю, следующее должно работать. Я построил результирующий запрос через CTE, оставляя ваши запросы максимально точными. Кроме того, без данных я предположил, что они могут не иметь одинаковых месяцев.

 with mon_list (mon) as
     (select date_part('month',date '2020-01-01' + lev * interval '1 month')
        from generate_series ( 0, 11) t(lev)
     )  
   , player_count (mon, player_cnt) as 
     ( select  date_part('month', signup_date),count(cage_player_id)
         from player_signup
        group by date_part('month', signup_date)
     )
   , kpi_count (mon, active,total) as
     (select date_part('month', signup_date)  
           , count(p.cage_player_id) 
           , count(d.cage_player_id)  
        from player_signup as p
        join daily_kpis as d on d.cage_player_id = p.cage_player_id
       where slot_bet_amount > 0
         and ld_bet_amount > 0 
         and table_bet_amount > 0 
       group by date_part('month', signup_date)
     ) 
select ml.mon                  "Month"
     , coalesce(kpi.active,0)  "Active"
     , coalesce(kpi.total,0)   "Total" 
     , coalesce(pc.player_cnt) "Players"
  from mon_list          ml
  left join player_count pc  on (pc.mon  = ml.mon)
  left join kpi_count    kpi on (kpi.mon = ml.mon)
 order by ml.mon; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...