`
53873039oycg
  • 浏览: 837173 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    Oracle多行记录合并

    使用`MODEL`指令需要对Oracle SQL有深入理解,但能解决一些其他方法无法处理的复杂问题。 在实际应用中,选择哪种方法取决于具体的需求、数据结构以及Oracle数据库的版本。例如,如果只需要简单的字符串连接,`...

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

    ### 处理GROUP BY 查询速度慢的问题 ...综上所述,通过合理设计索引策略,可以有效解决GROUP BY查询速度慢的问题。此外,通过持续的性能监控和测试,还可以不断优化数据库性能,确保系统的高效运行。

    oracle group by语句实例测试

    Oracle中的`GROUP BY`语句是SQL查询中的关键部分,用于根据一个或多个列对数据进行分组,以便对每个组执行聚合函数,如`SUM`、`COUNT`、`AVG`等。在本例中,我们看到的`GROUP BY`语句是用来对`test`表中的数据进行...

    oracle_11gR2_08 分组查询GROUP BY,模糊查询LIKE

    在Oracle 11g Release 2数据库管理系统中,掌握分组查询GROUP BY、模糊查询LIKE、连接查询JOIN以及IN()和NOT IN()等查询技术是至关重要的,它们为数据分析师和开发人员提供了强大的数据筛选与汇总能力。以下是对这些...

    Oracle 性能问题一般解决思路

    通过分析SQL执行计划,检查表的统计信息,以及调整数据库参数,都可以帮助找到并解决问题。 总的来说,解决Oracle性能问题是一个涉及多方面步骤的过程,包括诊断、定位、优化和验证,需要综合运用各种工具和技术,...

    order_by_、group_by_、having的用法

    在SQL查询中,`order_by_`、`group_by_`和`having`是三个非常重要的关键字,它们分别用于不同的数据处理操作。 1. `ORDER BY`:此关键字用于对查询结果进行排序,默认是升序(ASC),也可以指定降序(DESC)。在`...

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

    通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 在优化 Group By 查询时,仅对 Group By 字段设置索引是不够的。需要将聚合函数(如 min、max ...

    ORACLE重复记录查询.docxORACLE

    总结来说,Oracle提供了强大的查询和删除功能来处理重复记录的问题。通过`GROUP BY`和`HAVING`子句,我们可以对数据进行分组并过滤出重复的行,而`ROWID`则作为确定保留哪条记录的标准。在处理大规模数据时,这些...

    oracle中如何删除重复的记录

    ### Oracle中如何删除重复的记录 在Oracle数据库中,数据的完整性是非常重要的。有时,由于各种原因(如数据导入错误、系统故障等),数据库表中可能会出现重复的记录,这不仅浪费存储空间,还可能导致查询结果不...

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

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

    Oracle数据库中ORDER BY排序和查询按IN条件的顺序输出

    在描述中提到的问题中,当使用`ORDER BY`对包含非唯一值的列进行排序,并结合分页查询时,发现不同页码的数据可能会有重复。这进一步证实了`ORDER BY`在Oracle中的不稳定特性。在没有唯一索引或主键约束的情况下,...

    ORACLE去除重复数据方法

    - `(SELECT CONTRACTID, MIN(ALTER_DATE) AS ALTER_DATE FROM AGENT_CHANGE_TABLE GROUP BY CONTRACTID)`:这部分代码的功能是基于`CONTRACTID`分组,为每一组选出最早的`ALTER_DATE`时间,并将这些信息作为临时表`...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    Oracle查询重复数据并删除,只保留一条记录.docx

    为解决这个问题,本文将介绍如何使用 Oracle 查询重复数据并删除,只保留一条记录。 一、重复记录根据单个字段来判断 在 Oracle 中,我们可以使用 GROUP BY 语句来查找重复记录。假设我们要根据 FIELD_CODE 字段来...

    清晰解读GroupBy

    `GROUP BY`子句用于结合`SELECT`语句,将来自同一个表的多条记录分组为一组或多组。通常情况下,`GROUP BY`会与聚合函数一起使用,如`COUNT()`、`SUM()`、`AVG()`等,以便对每个分组的数据进行统计或计算。 #### 二...

    oracle 查询出每组中最大的三个记录和查询重复记录

    在Oracle中,可以使用`GROUP BY` 和 `HAVING` 子句来实现这个功能。假设我们有一个`users`表,想要找出所有重复的邮箱地址,可以编写以下查询: ```sql SELECT email, COUNT(*) as count FROM users GROUP BY email...

    oracle删除重复记录

    对于单个字段的重复记录,可以使用GROUP BY和HAVING结合COUNT函数找到重复的peopleId,然后删除ROWID不是最小的记录。 查询语句: ```sql select * from people where peopleId in (select peopleId from ...

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

    使用`GROUP BY`删除重复记录时,可以按照`num`字段分组并删除所有重复记录。 ```sql DELETE FROM student GROUP BY num HAVING COUNT(num) > 1; ``` 需要注意的是,上述删除语句会导致语法错误,因为`GROUP BY`不...

Global site tag (gtag.js) - Google Analytics