用where子句查询两张表的结果
Querying result for the two tables with where clause
我有一个 SQL 测试的代码问题。不用说,这是我以前没有遇到过的一些新概念。
包含 {columns} 的表格是:
phones {Name, Phone_Number}
calls {id,caller,callee,duration}
查找总通话时长 大于或等于 10 分钟 的客户的“姓名”。请注意,持续时间需要在呼叫者和被呼叫者列上求和,以获得大于 10 分钟的总持续时间。
条件:显示只有名称列的查询。
方法是什么?
我需要使用两次 join 关键字然后根据名称执行分组是否正确?
不,您需要的是让呼叫者和被呼叫者处于同一位置,以便对个人的持续时间求和。这样做之后,您可以加入手机 table。这是最简单的 UNION of select on call 与另一个 select call selecting first caller and then callee.参见 fiddle here。你没有给出完整的 table 定义,缺少数据类型所以我不得不做一些假设。 None越少过程相同
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;
我有一个 SQL 测试的代码问题。不用说,这是我以前没有遇到过的一些新概念。
包含 {columns} 的表格是:
phones {Name, Phone_Number}
calls {id,caller,callee,duration}
查找总通话时长 大于或等于 10 分钟 的客户的“姓名”。请注意,持续时间需要在呼叫者和被呼叫者列上求和,以获得大于 10 分钟的总持续时间。
条件:显示只有名称列的查询。
方法是什么?
我需要使用两次 join 关键字然后根据名称执行分组是否正确?
不,您需要的是让呼叫者和被呼叫者处于同一位置,以便对个人的持续时间求和。这样做之后,您可以加入手机 table。这是最简单的 UNION of select on call 与另一个 select call selecting first caller and then callee.参见 fiddle here。你没有给出完整的 table 定义,缺少数据类型所以我不得不做一些假设。 None越少过程相同
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;