1.题目描述
有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案,来查找这些顾客的 ID ,以及他们只光顾不交易的次数。返回以 任何顺序 排序的结果表。返回结果格式如下例所示:
要求返回的图为:
2.解答
其中很明显的是采用外连结
select *
from visits as v
left outer join transactions as tr
on v.visit_id=tr.visit_id;
首先说明的是两张表连结后,其实是所有的列都在的,所以后续进行引用的时候采用的都是 表名.列名的格式,即使这个列两个表都有。
观察需要输出的结果可以发现对于不是 null 的值就是发生消费的记录,而我们需要的是没有消费的 vist,那些值为 null 的表示该visit 记录并没有发生交易,所以要把这些交易过滤出来
select *
from visits as v
left outer join transactions as tr
on v.visit_id=tr.visit_id
where transaction_id is null;
那接下来就是 select 的步骤了
select v.customer_id ,count(v.visit_id) as count_no_trans
from visits as v
left outer join transactions as tr
on v.visit_id=tr.visit_id
where transaction_id is null
group by customer_id;
其中select 中 count()中的v.visit_id 中的表名不要丢了,否则就会指代不明报错。