【问题标题】:Querying result for the two tables with where clause使用where子句查询两张表的结果
【发布时间】:2021-05-20 22:19:34
【问题描述】:

我有一个 SQL 测试的代码问题。不用说,这是我以前没有遇到过的一些新概念。

带有 {columns} 的表格是:

 phones {Name, Phone_Number}
 
 calls {id,caller,callee,duration}

为总通话时长大于或等于 10 分钟的客户查找“姓名”。请注意,持续时间需要在调用者和被调用者列上求和,以获得大于 10 分钟的总持续时间。

条件:仅显示名称列的查询。

方法是什么?

我是否正确,我需要使用两次 join 关键字,然后按名称执行分组?

【问题讨论】:

    标签: sql postgresql join union


    【解决方案1】:

    不,你需要的是让调用者和被调用者进入相同的位置,以便对个人的持续时间求和。完成后,您可以加入电话表。使用 UNION 选择通话时最简单,另一个选择通话选择第一个呼叫者,然后是被呼叫者。见fiddle here。您没有给出完整的表定义,缺少数据类型,所以我不得不做出一些假设。不过过程是一样的。

    with call_list (id, duration) as 
         (select caller id, duration 
            from calls 
           union all 
          select callee, duration 
            from calls
        order by id
         )  
    select p.name, p.phone_number, sum(cl.duration) 
      from call_list cl
      join phones    p  on (p.id = cl.id)
     group by p.name, p.phone_number;
    

    【讨论】:

    • 这是一个编码测试,我无法复制测试问题。下次我会sn-p它。但我需要了解你所做的方法的要点,干杯。
    猜你喜欢
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2019-05-08
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多