表:SYS_USER 字段 USERID,USERNAME
001 张三
002 李四
003 王五表:HOS_CUST 字段 CUST_ID,CUST_NAME,DEV_ID1,DEV_ID2,DEV_ID3,DEV_ID4,DEV_ID5,CUST_TYPE
0001 A 张三 李四 甲
0002 B 李四 王五 乙
0003 C 张三 李四 王五 丙
0004 D 王五 李四 丁
0005 E 王五 李四 甲
0006 F 张三 李四 丁
0007 G 张三 甲需要结果:USERID USERNAME 甲 乙 丙 丁
001 张三 2 0 1 1
002 李四 2 1 1 2
003 王五 1 1 1 1表SYS_USER和表HOS_CUST有很多条记录,但甲乙丙丁是固定的只有四个,HOS_CUST中每条记录上同一个人最多只出现一次。5个位置至少有一个有名字。我自己写了条语句逻辑上没问题 就是查询起来非常慢。我第2个表中有上10万条记录。
哪位帮我写个效率点的语句,不胜感激!
001 张三
002 李四
003 王五表:HOS_CUST 字段 CUST_ID,CUST_NAME,DEV_ID1,DEV_ID2,DEV_ID3,DEV_ID4,DEV_ID5,CUST_TYPE
0001 A 张三 李四 甲
0002 B 李四 王五 乙
0003 C 张三 李四 王五 丙
0004 D 王五 李四 丁
0005 E 王五 李四 甲
0006 F 张三 李四 丁
0007 G 张三 甲需要结果:USERID USERNAME 甲 乙 丙 丁
001 张三 2 0 1 1
002 李四 2 1 1 2
003 王五 1 1 1 1表SYS_USER和表HOS_CUST有很多条记录,但甲乙丙丁是固定的只有四个,HOS_CUST中每条记录上同一个人最多只出现一次。5个位置至少有一个有名字。我自己写了条语句逻辑上没问题 就是查询起来非常慢。我第2个表中有上10万条记录。
哪位帮我写个效率点的语句,不胜感激!
解决方案 »
- 高效SQL求解
- 关于数据库查询语句
- 数据库里已经有了数据,这个时候建立索引,以前的数据是否能加入到索引里?
- DB2安装问题
- 程序打包问题
- 03115错误原因(急)
- SPOOL导出文件时遇到的问题
- ORACLE817在扔REDHAT8安装,运行./runInstaller出现初始化JDK环境后出现please wait.....就没有任何反应了不知是不是JDK没有没有装好
- a表含有主键status,b表中有外键status,现在要用一个sql语句统计a表中各种状态在b表中含有的记录数,请问如何写,谢谢!
- Question_两本书哪本更好些对于PL/SQL语法方面
- || 运算符问题
- 关于Oracle入门和深入学习的书籍,请大家推荐
这种方式
sum(decode(cust_type, '乙', 1)) 乙,
sum(decode(cust_type, '丙', 1)) 丙,
sum(decode(cust_type, '丁', 1)) 丁
from (select dev_id1 username, cust_type
from host_cust
union all
select dev_id2 username, cust_type
from host_cust
union all
select dev_id3 username, cust_type
from host_cust
union all
select dev_id4 username, cust_type
from host_cust
union all
select dev_id5 username, cust_type from host_cust) a, SYS_USER b
where a.username = b.username
group by a.username;
这个由于你的设计的原因导致这个查询不会太快。你应该将dev_id1 ~ 5 直接拆成多行,那样建上索引就会快多了。
userid USERNAME 甲 乙 丙 丁
001 张三 21027 20844 20640 20933
002 李四 20650 20882 20787 20652
003 王五 20779 20780 20874 20983
004 赵六 20733 20916 20817 21087
005 陈七 20877 20988 20702 20694全查出来花费4.312秒。我的数据库是在我本机的虚拟机里装的,Oracle 9204,红帽linux 虚拟机内存512M。
1. 先汇总记录,再统计 group by
2. 先统计group by ,再汇总 group by,汇总后的数据再合并sum