数据量大,也是有助于查找问题的。
2009-11-13 15:25
183 查看
数据量大,不可否认管理和维护起来难度都会有所增加。但是我们应该看到另一个好的方面,数据量大了,也是有助于查找问题的。下面是论坛里一个朋友发帖子问的问题:
现有一张表 表名tabel1
KHMC PZM GX SL
AA A-01 S1 2
AA A-01 S3 1
AA A-01 S1 4
AA A-01 S3 1
AA A-01 S1 8
AA A-01 S3 5
BB B-01 S1 4
BB B-01 S2 2
BB B-01 S1 9
BB B-01 S2 4
BB B-01 S1 4
BB B-01 S2 2
请帮忙写 汇总要求格式 按 KHMC PZM 汇总 GX要全部显示出来 没有的现实0
KHMC PZM GX SL
AA A-01 S1 14
AA A-01 S2 0
AA A-01 S3 7
BB B-01 S1 17
BB B-01 S2 8
BB B-01 S3 0
我看到一个朋友的回帖,内容如下:
select a.khmc,a.pzm,a.gx,nvl(num,0) from
(select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a,
(select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b
where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+)
order by 1,2,3;
我一开始没仔细看,不明白上面第二行红色的那句话的作用。就自己做了下实验:
这样看起来好像结果没什么不同哦,可后来我又仔细看了下上面的SQL语句,又看了下楼主的要求里有这么一句话"GX要全部显示出来 没有的现实0 ”。就加了点数据,又试了试,果然就试出来问题了
看到了吧,BB中没有显示出S3相应的记录。
这也就是前面标注出红色那部分我一开始没看明白语句的作用
select a.khmc,a.pzm,a.gx,nvl(num,0) from
(select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a,
(select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b
where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+)
order by 1,2,3;
通过第二句在两个select语句中选取出了khmc,pzm和gx,如果一起选的话,就不会有
BB B-01 S3 0
这条记录了。
而where条件中的(+)作用就显而易见了,外连接,即便BB中不存在相应S3的记录,也要拼接出一条来,通过NVL把SL字段置为0就可以了。
现有一张表 表名tabel1
KHMC PZM GX SL
AA A-01 S1 2
AA A-01 S3 1
AA A-01 S1 4
AA A-01 S3 1
AA A-01 S1 8
AA A-01 S3 5
BB B-01 S1 4
BB B-01 S2 2
BB B-01 S1 9
BB B-01 S2 4
BB B-01 S1 4
BB B-01 S2 2
请帮忙写 汇总要求格式 按 KHMC PZM 汇总 GX要全部显示出来 没有的现实0
KHMC PZM GX SL
AA A-01 S1 14
AA A-01 S2 0
AA A-01 S3 7
BB B-01 S1 17
BB B-01 S2 8
BB B-01 S3 0
我看到一个朋友的回帖,内容如下:
select a.khmc,a.pzm,a.gx,nvl(num,0) from
(select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a,
(select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b
where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+)
order by 1,2,3;
我一开始没仔细看,不明白上面第二行红色的那句话的作用。就自己做了下实验:
SQL> create table tabel1(khmc varchar2(10),pzm varchar2(10),gx varchar2(10),sl n umber); Table created. SQL> insert into tabel1 values('AA','A-01','S1',2); 1 row created. SQL> insert into tabel1 values('AA','A-01','S1',4); 1 row created. SQL> insert into tabel1 values('AA','A-01','S1',8); 1 row created. SQL> insert into tabel1 values('AA','A-01','S3',1); 1 row created. SQL> insert into tabel1 values('AA','A-01','S3',1); 1 row created. SQL> insert into tabel1 values('AA','A-01','S3',5); 1 row created. SQL> commit; Commit complete. SQL> insert into tabel1 values('AA','A-01','S2',0); 1 row created. SQL> commit; Commit complete. SQL> select * from tabel1; KHMC PZM GX SL ---------- ---------- ---------- ---------- AA A-01 S1 2 AA A-01 S1 4 AA A-01 S1 8 AA A-01 S3 1 AA A-01 S3 1 AA A-01 S3 5 AA A-01 S2 0 7 rows selected. SQL> select a.khmc,a.pzm,a.gx,nvl(num,0) from 2 (select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a, 3 (select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b 4 where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+) 5 order by 1,2,3; KHMC PZM GX NVL(NUM,0) ---------- ---------- ---------- ---------- AA A-01 S1 14 AA A-01 S2 0 AA A-01 S3 7 --下面是我改过了的写法 SQL> select a.khmc,a.pzm,a.gx,nvl(num,0) from 2 (select distinct khmc,pzm,gx from tabel1) a, 3 (select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b 4 where a.khmc = b.khmc and a.pzm = b.pzm and a.gx = b.gx 5 order by 1,2,3; KHMC PZM GX NVL(NUM,0) ---------- ---------- ---------- ---------- AA A-01 S1 14 AA A-01 S2 0 AA A-01 S3 7
这样看起来好像结果没什么不同哦,可后来我又仔细看了下上面的SQL语句,又看了下楼主的要求里有这么一句话"GX要全部显示出来 没有的现实0 ”。就加了点数据,又试了试,果然就试出来问题了
SQL> insert into tabel1 values('BB','B-01','S1',4); 1 row created. SQL> insert into tabel1 values('BB','B-01','S1',9); 1 row created. SQL> insert into tabel1 values('BB','B-01','S2',2); 1 row created. SQL> insert into tabel1 values('BB','B-01','S2',4); 1 row created. SQL> commit; Commit complete. SQL> select a.khmc,a.pzm,a.gx,nvl(num,0) from 2 (select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a, 3 (select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b 4 where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+) 5 order by 1,2,3; KHMC PZM GX NVL(NUM,0) ---------- ---------- ---------- ---------- AA A-01 S1 14 AA A-01 S2 0 AA A-01 S3 7 BB B-01 S1 13 BB B-01 S2 6 BB B-01 S3 0 6 rows selected. SQL> select a.khmc,a.pzm,a.gx,nvl(num,0) from 2 (select distinct khmc,pzm,gx from tabel1) a, 3 (select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b 4 where a.khmc = b.khmc and a.pzm = b.pzm and a.gx = b.gx 5 order by 1,2,3; KHMC PZM GX NVL(NUM,0) ---------- ---------- ---------- ---------- AA A-01 S1 14 AA A-01 S2 0 AA A-01 S3 7 BB B-01 S1 13 BB B-01 S2 6
看到了吧,BB中没有显示出S3相应的记录。
这也就是前面标注出红色那部分我一开始没看明白语句的作用
select a.khmc,a.pzm,a.gx,nvl(num,0) from
(select * from (select distinct khmc,pzm from tabel1) a,(select distinct gx from tabel1) b) a,
(select khmc,pzm,gx,sum(sl) num from tabel1 group by khmc,pzm,gx) b
where a.khmc = b.khmc(+) and a.pzm = b.pzm(+) and a.gx = b.gx(+)
order by 1,2,3;
通过第二句在两个select语句中选取出了khmc,pzm和gx,如果一起选的话,就不会有
BB B-01 S3 0
这条记录了。
而where条件中的(+)作用就显而易见了,外连接,即便BB中不存在相应S3的记录,也要拼接出一条来,通过NVL把SL字段置为0就可以了。
相关文章推荐
- [recv][网页][数据]recv到网页数据的查找问题
- 数据库中只有一个时间字段,查找一个时间段的数据问题(mybits)
- mongodb,数值类型查找不到数据的问题
- 查找webService中接口发送不了数据问题
- mysql中timestamp类型数据查找中出现的问题
- oracle数据中 模糊查找关键字like存在问题解决
- 海量数据查找唯一数据问题
- 解决mysql的select查找的数据出现乱码的问题
- 关于从大量数据中查找唯一数据的几个问题
- Local Response Normalization作用——感觉LRN也是解决的梯度消失和爆炸问题,统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的
- 数据结构——线性表——散列存储结构——哈希表知识点总结 原创 2017年05月14日 10:08:40 散列(hashing)是一种重要的存储方法,也是一种常见的查找方法。 基本思想:以结点的
- 位图法--解决海量数据问题(查找是否存在,不重复数据)
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- Top K 算法(从n多个数据中查找出现频率最多的前m个的问题)
- 安卓奇葩问题之SQLite条件查找不到数据
- 用hive解决数据的查找问题(影评案例)
- 初学hibernate 查找数据—问题记录
- 搜索问题(查找X是否在数据中)
- 关于mongodb查询数据,数值类型查找不到数据的问题
- 请单击下面的按钮,以重定向到可以选择新数据存储区的页。下面的消息可能会有助于诊断问题: 无法连接到 SQL Server 数据库。