`
sunxin.jl
  • 浏览: 11698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

oracle group by 深入理解

阅读更多

1、sql语句select的执行过程

(1)根据where字句的条件表达式,从from子句指定的基本表或视图中找到满足条件的元组。
(2)再按select子句中的目标列的表达式,选出元组的属性值形成结果表。
(3)如果有group子句,则将结果表按group中指定的列进行分组,该属性列值相等的元组为一组,通常会在每组中作用集函数。
(4)如果group子句带having短语,则只有满足having指定条件的组才输出。
(5)如果有order子句,则将结果表按order子句指定的列升序或降序排序。

2、group by 子句的将查询结果表按某一列或多列分组,值相等的为一组。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用与整个查询结果。

(1)实验说明group的常见操作和错误

实验数据

SQL> select *  from student;
        ID    CLASSNO NAME
---------- ---------- ------------------
         1          1       张三
         2          1       李四
         3          1       王五
         4          2       刘六
         5          2       钱七
         6          2       赵八

已选择6行。

问题1:查出一班的人数?
SQL> select count (*) from student  where classno=1  group by classno;
  COUNT(*)
----------
         3

问题2:查人数的同时能不能把学生姓名也查出来呢?

SQL> select name ,count (*) from student  where classno=1  group by classno;
select name ,count (*) from student  where classno=1  group by classno
       *
ERROR 位于第 1 行:
ORA-00979: 不是 GROUP BY 表达式


可见这个语句满足不了我们的目的,因为我们分组后,我们是对组进行操作,像学生姓名这列不是组能有的性质。


3、巧用 group 分组集函数

(1)问题的提出

SQL> select * from student1;

        ID        SID   SNAME        CLASSID                D
---------- ----------    ----------           ----------                  ----------
         1          1      a                      1                            1
         2          1      a                      1                            2
         3          2      b                      1                            2

问题如下:

只是要生成excle表。只能对数据库做查询操作
想要的结果是:
        ID        SID   SNAME        CLASSID                D
---------- ----------    ----------           ----------                  ----------
         1          1      a                      1                            1
         3          2      b                      1                            2


这个问题怎么解决呢?

想到用distinct

select  id  ,distnict(sid ),sname , classid ,d  from student1

可惜sql不支持distnict这中用法

sql中 只能select  distnict  id  ,sid,sname ,classid ,d  from student1

可这样不能满足我们的要求。

(2)巧用 group 分组集函数

SQL> select min(id),sid,sname,classid,min(d) from student1 group by sid,sname,classid;
   MIN(ID)        SID SNAME         CLASSID     MIN(D)
---------- ---------- ----------           ----------       ----------
         1          1     a                   1                   1
         3          2     b                   1                   1

分享到:
评论

相关推荐

    《Pro Oracle SQL》Chapter7--7.10GROUP BY Restrictions

    在7.10 GROUP BY Restrictions这一部分,作者深入探讨了在使用GROUP BY子句时的一些限制和注意事项,这对于理解和编写高效、正确的SQL查询至关重要。 1. GROUP BY基础:GROUP BY子句用于将数据集按照一个或多个列...

    Oracle多行记录合并

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

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

    本文将深入探讨`ORDER BY`子句在Oracle中的排序机制,以及查询时根据`IN`条件顺序输出的方法。 首先,`ORDER BY`用于指定查询结果的排序方式,可以基于一个或多个列进行升序(ASC)或降序(DESC)排序。然而,...

    sql-Group-by.rar_oracle

    通过阅读“sql分组函数使用.txt”,你将能够深入了解如何在Oracle中有效地使用GROUP BY,以及它如何与其他SQL元素结合使用以提供深入的数据洞察。理解并熟练运用这些概念对于进行复杂的数据分析和报告至关重要。

    oracle中使用group by优化distinct

    本篇文章将深入探讨如何利用`GROUP BY`来优化`DISTINCT`查询,以提高SQL查询性能。 首先,我们分析给出的SQL语句,这是一个非常复杂的查询,涉及到多个表的连接(JOIN)以及大量的列选择。`DISTINCT`关键字用在这里...

    清晰解读GroupBy

    本文将从`GROUP BY`的基础概念出发,通过一系列示例和深入分析,帮助读者更清晰地理解`GROUP BY`的工作原理及其应用场景。 #### 一、`GROUP BY`的基本概念 `GROUP BY`子句用于结合`SELECT`语句,将来自同一个表的...

    Oracle数据库IO深入分析

    在深入了解Oracle数据库的I/O操作之前,我们首先需要了解Oracle数据库的基本物理结构,这有助于更好地理解I/O产生的原因及其过程。 **1.1.1 控制文件** 控制文件是Oracle数据库的核心组成部分之一,它包含了关于...

    ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句

    在"ORACLE学习笔记系列(15)使用扩展的 GROUP BY 子句"这篇博文中,作者深入探讨了GROUP BY子句的高级用法,特别是如何利用扩展功能来处理更复杂的查询需求。 在标准的GROUP BY语句中,我们通常会指定一列或多列,...

    精通Oracle10编程

    《精通Oracle10编程》是一本深入探讨Oracle数据库10g版本编程的参考资料,适合对数据库有基础了解并希望进一步提升Oracle技术的读者。Oracle作为全球广泛使用的大型关系型数据库管理系统,其10g版本在功能和性能上都...

    oracle总结oracle总结面试必备

    Oracle数据库是全球广泛使用的大型关系型...以上是对Oracle数据库核心知识点的概述,深入理解和熟练掌握这些内容,将为你的面试和实际工作打下坚实的基础。在实践中,不断学习和积累经验,才能成为真正的Oracle大师。

    使用Group by分组统计.rar

    下面我们将深入探讨`GROUP BY`语句的使用方法及其相关知识点。 首先,`GROUP BY`语句的基本结构是这样的: ```sql SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name WHERE ...

    ORA-00979 不是group by 表达式

    - 了解SQL的聚合函数和GROUP BY子句的基本用法是数据库操作的基础。 - 多做练习,尝试不同的查询结构,熟悉错误提示,有助于提高SQL技能。 通过以上解释,你应该能够理解ORA-00979错误的原因,以及如何修正它。在...

    SQL之分组统计和子查询专题

    李兴华老师的ORACLE数据库课程中,对分组统计和子查询进行了深入详解。本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL中,分组统计是对数据进行...

    关于sql的group by的分析

    在本文中,我们将深入探讨`GROUP BY`的用法、注意事项以及它在实际应用中的作用。 首先,让我们了解`GROUP BY`的基本语法。当我们在一个查询中使用`GROUP BY`时,我们首先要指定一个或多个列名,这些列将根据其值对...

    oracle-sql.rar_oracle

    此外,还可能涉及到了更高级的查询技巧,如联接(JOIN)、子查询、分组(GROUP BY)、排序(ORDER BY)以及窗口函数(OVER())等。 另一方面,“www.pudn.com.txt”这个文件名看起来像是来源于一个网站地址,可能是...

    Oracle实用教程(第五版)(Oracle11g版)

    通过《Oracle实用教程(第五版)(Oracle11g版)》的学习,读者不仅可以掌握Oracle数据库的基础操作,还能深入理解其高级特性,为实际工作中的数据库管理打下坚实基础。结合实际的“学生表、课程表、成绩表”案例,...

    Oracle Press - Oracle Database 11g SQL

    本书全面覆盖了Oracle 11g版本中的SQL语法、功能及最佳实践,旨在帮助读者深入理解和掌握这一强大的数据库查询语言。 在Oracle 11g中,SQL是进行数据管理、检索、更新和删除的核心工具。以下是本书可能涉及的一些...

    Oracle SQL(SQL for Oracle)

    这本书“Oracle SQL(SQL for Oracle)”显然是为了帮助读者深入理解和掌握在Oracle环境中有效使用SQL。 在Oracle SQL中,有以下几个关键知识点: 1. **数据类型**:Oracle支持多种数据类型,包括数值型(如NUMBER...

Global site tag (gtag.js) - Google Analytics