关于银行类#SQL#的问题,如何解决?

  1. 统计每个产品类型总持有余额,持有余额大于5000的客户数;
  2. 输出每个产品类型持有总余额前10的客户号,根据产品类型持有总余额从大到小排序;
  3. 统计持有两个及两个以上产品的客户数;
  4. 输出产品与产品之间持有余额的重叠客户数
    结果表样式:产品A,产品B,同时持有的客户数(需列举所有在客户产品持有余额统计表中的产品的两两交集)。

第四题怎么解答?

img

对产品类型进行分组,having中判断持有余额大于5000的

话说这面试题做对是不是就可以进银行了?
题主说了一句,"第四题怎么解答?",那我默认你是只问第四题。
这题出得有一点点妙,我差点就绕进去了。
首先,这里肯定要构造一个笛卡尔积,而且题目中指出了要用第一个表中的数据,而不是使用第二个表,也就是说,只需要显示的确有对应组合发生的数据。
那么问题就简单了

select a.prod_code 产品A, b.prod_code 产品B, count(1) 同时持有的客户数
  from report_cust_prod_aum_stats a, report_cust_prod_aum_stats b
 where a.cust_no = b.cust_no
   and a.prod_code <> b.prod_code
 group by a.prod_code, b.prod_code

如果需要翻译产品名称,再把第二个表关联进去两次来进行翻译就好了。
当然,这个题目中漏了一个说明,比如
产品A为"国金",产品B为"现金宝"

产品A为"现金宝",产品B为"国金"
这两条是否需要去重?
某些业务场景下是需要去重的,当然也有某些业务场景下是不需要去重的