博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL子连接案例
阅读量:5022 次
发布时间:2019-06-12

本文共 1950 字,大约阅读时间需要 6 分钟。

子查询

何时使用子查询

1. 子查询作为数据源

2. 数据加工

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

1364699-20190527184722591-276625793.png

sql语句实现如下:

select 'Small Fry' name , 0 low_limit , 4999.99 high_limitunion allselect 'Average Joes' name ,5000 low_limit, 9999.99 high_limitunion allselect '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_customersfrom (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_idfrom (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_limitorder by groups.name,cust_id ASC;

效果:

1364699-20190527184746632-1531912559.png

3. 面向任务的子查询

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

你可能感兴趣的文章
golang 的编译安装以及supervisord部署
查看>>
easyui源码翻译1.32--Dialog(对话框窗口)
查看>>
阿里架构师,讲述基于微服务的软件架构模式
查看>>
Eclipse导入maven项目时,Pom.xml文件报错处理方法
查看>>
01、JAVA开发准备
查看>>
asp.net mvc 错误处理 - 自定义报错处理,生成错误日志
查看>>
Linux centos ssh
查看>>
R语言之避免for循环示例
查看>>
[转]jQuery 选择器和dom操作
查看>>
Jenkins+Maven+SVN快速搭建持续集成环境(转)
查看>>
bootstrap 媒体查询
查看>>
杜教筛
查看>>
《Ext JS模板与组件基本知识框架图----模板》
查看>>
txmpp
查看>>
微信开发时调用jssdk,在安卓设备中成功调用;在ios设备中返回错误消息:config fail,无其他具体错误消息,且接口权限显示获取ok,无法调用...
查看>>
【Github教程】史上最全github使用方法:github入门到精通
查看>>
抽象工厂模式(Abstract Factory)
查看>>
luogu1373 小a和uim之大逃离 (dp)
查看>>
Redis的Pub/Sub客户端实现
查看>>
SQL日常问题和技巧——持续更新
查看>>