【问题标题】:Combining two queries with different tables and where clauses将两个查询与不同的表和 where 子句结合起来
【发布时间】:2020-03-20 03:32:03
【问题描述】:

我有两个查询需要合并。我试过使用连接和联合,但没有任何效果。例如,如果我执行子查询,我的总列最终对于所有行只有一个值。我想要的是总列具有不同的值(ID 总数除以月)。而活动列应用了某些条件并连接到 daily_kpis 表(导致相对于总列的 ID 较少)。

将它们结合起来的最佳方式是什么?另外,我正在使用 postgresql。

更新:澄清一下,我想知道每个月的 ID 总数,然后我只想查看该月活跃的 ID 的选定数量。如果发现他们下注任何金额(大于零),则认为他们是活跃的。我需要 p 表到 d 表来查看有多少 ID 投注了钱。但是对于总列,我不想加入,我只想查看 p 表中每个月的 ID 总数。

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 Query 1

查询 2 Query 2

【问题讨论】:

  • 抱歉!在第一次查询中忽略计数(f.cage_player_id)
  • Rocio,请不要有上面的评论,而是使用编辑标签(在问题下)并实际更新问题。

标签: sql postgresql


【解决方案1】:

没有实际的表定义,也没有带有结果的样本数据,我只能希望我能理解您的需求。但是,如果我理解正确,则以下内容应该有效。我已经通过 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; 

【讨论】:

  • 嗨!我已经更新了上面的问题。让我知道这是否更有意义。有没有一种简单的方法可以通过 INSERT 做到这一点?对不起,我有点新手
  • 另外,在这种情况下,UNION 也有意义吗?我一直在尝试使用它,但我认为我可能做错了什么
  • 一个 UNION 不会添加一列,它会添加一行。您必须调整选择的内容,以便联合的两侧具有相同数量和类型的列。您不想加入 - 为什么不呢?
  • 我明白你的意思了!我想我仍然需要查看您提供的内容才能理解它,因为我有点困惑。另外,如果我现在想创建一个列,按玩家划分活跃列,我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2014-12-23
  • 2020-03-25
  • 2012-03-05
相关资源
最近更新 更多