子查询

何时使用子查询

1. 子查询作为数据源

2. 数据加工

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

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;

不进行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;

效果:

3. 面向任务的子查询

SQL子连接案例的更多相关文章

  1. SQL Server 连接问题案例解析(1)

    SQL Server 连接问题案例解析(1) 转载自:http://blogs.msdn.com/b/apgcdsd/archive/2015/04/27/sql.aspx?CommentPosted ...

  2. (火炬)MS SQL Server数据库案例教程

    (火炬)MS SQL Server数据库案例教程 创建数据库: CREATE DATABASE TDB //数据库名称 ON ( NAME=TDB_dat,//逻辑文件名 在创建数据库完成之后语句中引 ...

  3. 通过sql server 连接mysql

    图文:通过sql server 连接mysql   1.在SQL SERVER服务器上安装MYSQL ODBC驱动; 驱动下载地址:http://dev.mysql.com/downloads/con ...

  4. ASP.NET连接数据库时,提示“用户 'sa' 登录失败原因: 未与信任 SQL Server 连接相关联

    用ASP.NET连接数据库时,提示"用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.".解决方法:首先检查是不是web.config文件内的用户名密码 ...

  5. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

  6. 【转】Win7 64bit Oracle 11g 使用PL/SQL Developer 连接时提示“SQL*Net not properly installed”

    转载:http://www.cnblogs.com/xihuaodc/p/3189257.html  因为之前的Oracle不能用了,所以重新安装了64位的Oracle,安装一路正常 完了之后安装了P ...

  7. SQL - 内连接与外连接

    PDF下载地址:SQL-内连接与外连接.pdf 连接查询在关系型数据库中经常用到,是多表联合查询的基础. 主要包含:内连接,外连接,交叉连接. SQL - 内连接与外连接 内连接 等值连接 不等值连接 ...

  8. SQL Server 2000:提示“未与信任SQL SERVER连接相关连”错误

    在使用“用户模式”登陆SQL Server 2000时提示“未与信任SQL SERVER连接相关连”错误,因为在安装SQL Server时选择“仅Windows”模式,所以所有用户都不可以登陆. 解决 ...

  9. sql子查询 嵌套SELECT语句

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...

随机推荐

  1. Ubuntu caffe 测试matlab接口

    这是17年8月份新增的: make matcaffe error 255解决:在Makefile里面,大约第410行那一句话CXXFLAGS += -MMD -MP下面添加CXXFLAGS += -s ...

  2. Git账号Window10系统配置密钥

    Git 拉取 推送 报错 . Window10系统 需要配置Git账号密钥.

  3. 【leetcode】1249. Minimum Remove to Make Valid Parentheses

    题目如下: Given a string s of '(' , ')' and lowercase English characters. Your task is to remove the min ...

  4. 修改 Linux 服务器时间

    1.当前时间 [app@127-0-0-1 shine]$ date Wed Oct 23 11:44:30 CST 2019 2.修改时间 [app@127-0-0-1 shine]$ date - ...

  5. TensorFlow使用记录 (二): 理解tf.nn.conv2d方法

    方法定义 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC&quo ...

  6. 一个困扰很久的异常—java.lang.NoClassDefFoundError: com/google/gson/Gson

    描述: 这个异常是在运行时抛出的,编译的时候没有任何问题,而且异常信息非常少,只有一句:java.lang.NoClassDefFoundError: com/google/gson/Gson 解决: ...

  7. 关于JDK8对List的分组汇总

    1. 跟据某个属性分组OfficeId: Map<String, List<IncomeSumPojo>> collect = list.stream().collect(Co ...

  8. tp5获取器的用法。

    1.命名规则   get + 属性名的驼峰命名+ Attr      ------>在相应的model中创建方法 例如: protected function getSexAttr($value ...

  9. 191107Django的Cookie和Session

    Cookie的使用 from django.shortcuts import render,redirect def login(request): print("1",reque ...

  10. 通过tar包解压安装docker

    以下步骤在centos7和debian10中验证通过 1.通过官网下载安装包 wget https://download.docker.com/linux/static/stable/x86_64/d ...