`
53873039oycg
  • 浏览: 824944 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]oracle group by问题解决记录

 
阅读更多

       同事写了个SQL,发现group by之后总数不对,不用group by查询有26条数据,使用group by查询总数只有16条数据,同事写的sql类似如下

       

 select t.sec_id,t.type_t,t.prod_id,t.amt_num
 from tmp_t t
 group by t.sec_id,t.type_t,t.prod_id,t.amt_num
 order by t.sec_id,t.type_t,t.prod_id,t.amt_num

    看了之后跟同事说group by 之后,amt_num要使用sum,同事一直不相信,只好写个简单的例子,上例子

   

with tmp_t as(
 select '0' as sec_id,'10000001' as type_t,'80008510' as prod_id,1 as amt_num from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual) 

    如上所示,只有2条数据,其他的是重复的

   

  with tmp_t as(
 select '0' as sec_id,'10000001' as type_t,'80008510' as prod_id,1 as amt_num from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual)  
  select *
   from tmp_t t
  order by t.sec_id, t.type_t, t.prod_id, t.amt_num

   

   group by使用sum:

  

  with tmp_t as(
 select '0' as sec_id,'10000001' as type_t,'80008510' as prod_id,1 as amt_num from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual)  
  select t.sec_id,t.type_t,t.prod_id,sum(t.amt_num)
 from tmp_t t
 group by t.sec_id,t.type_t,t.prod_id,t.amt_num
 order by t.sec_id,t.type_t,t.prod_id,t.amt_num

   结果如下

   

    总数是正确的

 

    group by 不使用sum:

   

  with tmp_t as(
 select '0' as sec_id,'10000001' as type_t,'80008510' as prod_id,1 as amt_num from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000001','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual union all
 select '0','10000002','80008510',1 from dual)  
  select t.sec_id,t.type_t,t.prod_id,t.amt_num
 from tmp_t t
 group by t.sec_id,t.type_t,t.prod_id,t.amt_num
 order by t.sec_id,t.type_t,t.prod_id,t.amt_num

   结果如下,数量不对

   

 

     全文完

  

 

   

  • 大小: 116.3 KB
  • 大小: 114.9 KB
  • 大小: 116.2 KB
分享到:
评论

相关推荐

    Oracle多行记录合并

    Oracle多行记录合并/连接/聚合字符串的几种方法

    mysql使用GROUP BY分组实现取前N条记录的方法

    本文实例讲述了mysql使用GROUP BY分组实现取前N条记录的方法。分享给大家供大家参考,具体如下: MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY...

    处理group by 查询速度慢的问题.docx

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    ORACLE重复记录查询.docxORACLE

    delete from people where peopleId in (select peopleId from people group by peopleId having count (peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId...

    处理group by 查询速度太慢的问题 数据量大.doc

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...

    oracle中使用group by优化distinct

    (环境是sql developer)有一个语句执行很慢,查询出来的结果有17544条记录,但需970秒,速度很慢。语句是这样的: SELECT DISTINCT 'AMEND_NEW', reporttitle, reportsubtitle, cab_cab_transactions.branch...

    超详细oracle教程

    很详细的oracle教程.... 7.2、子查询空值/多值问题 如果子查询未返回任何行,则主查询也不会返回任何结果 (空值)select * from emp where sal > (select sal from emp where empno = 8888); 如果子查询返回单行结果...

    Mysql利用group by分组排序

    MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个字段进行order by,然后把有顺序的表进行...

    Oracle查询重复数据与删除重复记录方法

    几个删除重复记录的SQL语句  1.用rowid方法  2.用group by方法  3.用distinct方法  1。用rowid方法

    Oracle11g从入门到精通2

    3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 多表连接查询 3.3.7 集合操作 3.3.8 子查询 3.4 数据操纵 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.4.4 TRLINCATE语句 3.5 数据控制 ...

    Oracle SQL最佳实践

    如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的性能,因为在GROUP之前已经过滤掉数据,因此更少的行被汇总  3.UNION会对两个SELECT语句的结果集执行一个SORT,并消除重复行,成本会...

    oracle sql 去重复记录不用distinct如何实现

    select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录 所以用distinct达不到想要的效果,用group by 可以解决这个问题。 例如要显示的字段为A、B、C三个,而A字段的内容不能重复...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2...

    最全的oracle常用命令大全.txt

    select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status; 8、查看数据库的版本 Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6...

    oracle实验报告

    (3)应用 PL/SQL 解决实际问题 【实验内容与步骤】 PL/SQL块中的可执行部分是由一系列语句组成的(包括对数据库进行操作的SQL语句,PL/SQL语言的各种流程控制语句等)。在块中对数据库查询,增、删、改等对数据的...

    Oracle报表开发学习记录

    group by OOD.ORGANIZATION_CODE, OOD.ORGANIZATION_NAME, MSA.SECONDARY_INVENTORY_NAME, MSA.DESCRIPTION, MSIV.SEGMENT1, MSIV.DESCRIPTION, MOQD.LOT_NUMBER, MSIV.MIN_MINMAX_QUANTITY, MSIV.MAX_MIN...

    Oracle练习笔试大全

    Oracle练习笔试大全 1、select ename, sal * 12 from emp; //计算年薪 2、select 2*3 from dual; //计算一个比较纯的数据用dual表 3、select sysdate from dual; //查看当前的系统时间 4、select ename, sal*12 ...

    Oracle11g从入门到精通

    3.3.4 GROUPBY子句 3.3.5 HAVING子句 3.3.6 多表连接查询 3.3.7 集合操作 3.3.8 子查询 3.4 数据操纵 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.4.4 TRLINCATE语句 3.5 数据控制 3.5.1 ...

Global site tag (gtag.js) - Google Analytics