子查询

何时使用子查询

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. 【HDU5890】Eighty seven

    题目大意:给定 N 个数,M 个询问,每次询问如果去掉三个数(可能相同),能否选择恰好 10 个数字,凑出 87 这个数. 题解:骚操作.. 集合凑数问题是一个很经典的模型,即:背包问题. 先进行预处 ...

  2. 【每日一包0003】kind-of

    github地址:https://github.com/ABCDdouyae... kind-of 判断数据类型用法:kind-of(date)返回:string 数据类型 January undef ...

  3. MySQL user表初始化

    默认安装的MySQL数据库,无法远程连接. 登录MySQL之后,运行 SELECT user,host from mysql.user; 如果只有一条记录,说明是这个原因. 将下面的脚本保存成user ...

  4. ubuntu安装wireshark

    $sudo apt-add-repository ppa:wireshark-dev/stable$sudo apt update$sudo apt install wireshark 出于安全方面的 ...

  5. [人物存档]【AI少女】【捏脸数据】现代风格

    点击下载:6543d037acaf2edd03b4679f821001e9380193ce.png

  6. Java验证身份证是否合法

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; im ...

  7. linux查看网关

    Linux下查看网关方法:route -n ip route show traceroute www.prudentwoo.com -s 100 第一行就是自己的默认网关 netstat -r mor ...

  8. Python天天学_02_基础二

    Python_day_02 金角大王:http://www.cnblogs.com/alex3714/articles/5717620.html ------Python是一个优雅的大姐姐 学习方式: ...

  9. Nowcoder 北师校赛 B 外挂使用拒绝 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 : 中文题.点链接 分析 : 有道题是问你不断求前缀和后的结果 Click here 这道题问的是逆过程 分析方法雷同.可参考 Click here ----------------- ...

  10. javascript中创建对象的方式及优缺点(一)

    1. 简单方式创建对象 // 字面量方式创建对象 var person1 = { name: "xyc", age: 23, sayHi: function() { console ...