SQL子连接案例

子查询

何时使用子查询

1. 子查询作为数据源

2. 数据加工

需求:根据不同顾客的所有的账户余额划分区间,进行分组

1364699-20190527184722591-276625793.png

sql语句实现如下:

select 'Small Fry' name , 0 low_limit , 4999.99 high_limit
union all
select 'Average Joes' name ,5000 low_limit, 9999.99 high_limit
union all
select 'High Hitters' name,10000 low_limit,9999999.99 high_limit;

需求:根据顾客,统计每一个分组里的顾客数目,以了解顾客的经济情况,根据不同的顾客提供对应的服务

思路:

  1. 一个顾客有多个账户 (account表里)

  2. group by每个顾客,统计每个顾客的总余额 (这里还涉及到账户类型一定要是ACCOUNT类型才是Customer的Accounts,因为还涉及到保险公司的账户类型,以及借贷的账户类型),所以还要跟产品表,产品类型表连接

  3. 根据这个总余额 和 上面的余额分组做 内连接,进行范围查询。(范围查询的内连接,把两张表连接起来,形成一个新的临时表)

  4. 最后,根据第3步得到的临时表,按分组名进行分组,group by groups.name,然后根据分组统计每个组里的人数。

    4.1 cust_rollup 临时表 为 每个customer的总余额

select groups.name,COUNT(*) num_customers
from (select a.cust_id ,SUM(a.avail_balance) cust_balance
      from account a
      inner join product p
      on a.product_cd = p.product_cd
      where p.product_type_cd = 'ACCOUNT'
      group by a.cust_id
     ) cust_rollup
     inner join 
     (select 'Small Fry' name , 0 low_limit , 4999.99 high_limit
      union all
      select 'Average Joes' name ,5000 low_limit, 9999.99 high_limit
      union all
      select 'High Hitters' name,10000 low_limit,9999999.99 high_limit) groups
      on cust_rollup.cust_balance between groups.low_limit and groups.high_limit
 group by groups.name;

1364699-20190527184735339-423933669.png

不进行group by,可以显示每个分组的顾客id

select groups.name,cust_id
from (select a.cust_id ,SUM(a.avail_balance) cust_balance
      from account a
      inner join product p
      on a.product_cd = p.product_cd
      where p.product_type_cd = 'ACCOUNT'
      group by a.cust_id
     ) cust_rollup
     inner join 
     (select 'Small Fry' name , 0 low_limit , 4999.99 high_limit
      union all
      select 'Average Joes' name ,5000 low_limit, 9999.99 high_limit
      union all
      select 'High Hitters' name,10000 low_limit,9999999.99 high_limit) groups
      on cust_rollup.cust_balance between groups.low_limit and groups.high_limit
order by groups.name,cust_id ASC;

效果:

1364699-20190527184746632-1531912559.png

3. 面向任务的子查询

转载于:https://www.cnblogs.com/zhanp/p/10932381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值