`
mzhj
  • 浏览: 227457 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 取出多个字段列中的最大值和最小值

    博客分类:
  • DAO
 
阅读更多
今天写sql 语句,需要取出多个字段列中的最大值和最小值。
     本来想到的做法比较麻烦,要分别取出max(one),max(two),max(three),放到pb中在编程处理。
     后来同事夏老帮忙找到个greatest 函数和least函数,只用写greatest (max(one),max(two),max(three))就解决问题,least用法同,good。



求多列的最大值,oracle中的greatest 函数
已知表TB的数据如下

SQL> select * from tb;

       ID CHINESE    MATH ENGLISH
---------- ---------- ---------- ----------
   1001       89       98       87
   1002       81       87       79

现在要得到如下的结果,该怎么来解决

       ID CHINESE    MATH ENGLISH        MAX        MIN
---------- ---------- ---------- ---------- ---------- ----------
   1001       89       98       87       98       87
   1002       81       87       79       87       79



想了半天也没想到啥好办法,首先自然而然想到用MAX和MIN函数 ,但是显然这两个是聚集函数 ,是要作用在同一个column的一个Group上面的,而现在要得到的MAX和MIN的值却是作用于每一行上面的,如果要借助于MAX()和 MIN()的话,还需要对原表的数据结构进行下处理(先进行转列操作unpivot),但是显然不是很好。

看到有个网友回帖用greatest 和 least函数 来做,真是简洁漂亮,也为自己的孤陋寡闻而狂汗呀

解决方式如下


SQL> SELECT id, chinese, math, english,
   2       greatest (chinese, math, english) max,
   3       least(chinese, math, english) min
   4   FROM tb;

       ID CHINESE    MATH ENGLISH        MAX        MIN
---------- ---------- ---------- ---------- ---------- ----------
   1001       89       98       87       98       87
   1002       81       87       79       87       79
分享到:
评论

相关推荐

    Oracle数据库中LOB的调优.pdf

    1. CHUNK:CHUNK是分配给LOB段的最小单元,通常是一个Oracle数据块的整数倍,其最小值为数据块的大小,最大值为32KB。数据在读取或写入LOB数据时,也是以CHUNK为单位,而且一个CHUNK中只允许存放一行中的数据。例如...

    oracle建触发器与创建递增字段

    - `NOMAXVALUE`:表示序列没有最大值限制。 - `MINVALUE 0`:设定序列最小值为0。 - `NOCYCLE`:当序列达到最大或最小值时不再循环。 - `CACHE 20`:预生成20个序列值并缓存,提高性能但可能有数据丢失的风险。 - `...

    Oracle使用序列创建自增字段

    在 Oracle 中,序列是一个用于生成一系列数字的对象,通常用于为表中的某一列提供连续的数值。创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment_value -- 指定每次生成的...

    Oracle9i中建立自增字段的最新办法

    这里,`<tablename>`需要替换为实际的表名,创建了一个名为`seq_<tablename>`的Sequence,其最小值为1,最大值为一个非常大的数值,起始值为1,每次递增1,并且不缓存值,确保每次获取的都是新的值。 2. **Trigger...

    oracle里建一个自增字段示例

    在Oracle数据库中,自增字段通常通过序列(Sequence)和触发器(Trigger)来实现。本篇文章将详细解释如何创建一个自增字段,并通过具体的步骤和代码示例来进行说明。 #### 序列(Sequence) 序列是一种数据库对象...

    oracle中用序列实现自动增长值

    - `CYCLE` 表示当达到最大值时,序列会重新从最小值开始;`NOCYCLE` 则表示到达边界后停止。 - `CACHE` 用于预先在内存中缓存一定数量的序列值,提高性能;`NOCACHE` 则表示每次请求时都从数据库中获取新值。 接...

    ORACLE自增主键设置方法

    序列是Oracle提供的一种自动产生数值的对象,可以用于为表中的某列自动分配唯一的数值。下面是一个创建序列的例子: ```sql CREATE SEQUENCE SEQ_TEST MINVALUE 1 -- 最小值 NOMAXVALUE -- 无最大值限制 START WITH...

    oracle数据库如何创建自增列的技巧教程.docx

    以下是如何在 Oracle 中创建自增列的详细步骤和相关知识点: 1. **创建序列(Sequence)** - `CREATE SEQUENCE` 语句用于创建序列。例如: ```sql CREATE SEQUENCE userlogin_seq INCREMENT BY 1 -- 每次增加的...

    Oracle分析函数

    - **定义**:找出一组数据中的最大值。 - **用途**:适用于需要确定最高值的情况。 ##### 4. AVG - **定义**:计算一组数据的平均值。 - **用途**:适用于需要获取平均指标的场景。 ##### 5. COUNT - **定义**:对...

    创建Oracle触发器用于表中序列值自增长(Helloblock写作)

    在此过程中,我们需要定义序列的最小值、初始值、每次增长量以及最大值等参数。 ```sql CREATE SEQUENCE seq_id MINVALUE 1 -- 最小值 START WITH 1 -- 初始值 INCREMENT BY 2 -- 每次增长量 MAXVALUE 999999999999...

    Oracle数据库中序列的使用

    假设我们需要创建一个名为`EXAM_NO_SEQ`的序列,其初始值为1484,最大值为9999999999,最小值为1,并且当达到最大值后会循环回到最小值。此外,为了提高性能,我们还设置了缓存大小为20,不指定顺序: ```sql ...

    oracle_11gR27

    - **MAX()**: 返回指定列的最大值,常用于找出某个字段的最大数值。 - **MIN()**: 返回指定列的最小值,用于找出字段的最小数值。 - **AVG()**: 计算指定列的平均值,适用于数值型数据。 - **SUM()**: 对指定列...

    Oracle数据库操作序列的一些常用命令

    此查询返回的信息通常包括序列名称、当前值、下一个值、最小值、最大值、增量等字段,这些信息对于管理和维护序列非常有用。 #### 三、获取序列的当前值与下一个值 在实际应用中,我们常常需要获取序列的当前值或...

    oracle自动增长列

    - `CYCLE`: 当序列达到最大值后会循环回到最小值。 - `CACHE cache_size`: 指定预分配并缓存的序列号数量。如果数据库出现故障,则可能会丢失已经缓存但尚未使用的序列号。 例如,根据题目给出的部分内容,创建名为...

    视图与查询oracle

    本文将详细讲解Oracle中的几个关键概念:视图、索引、同义词和序列,以及它们在查询优化和数据管理中的作用。 首先,我们来谈谈索引。索引是一种特殊的数据库结构,它能够显著提升查询速度。Oracle支持多种类型的...

    oracle中设置自增主键参考

    在Oracle数据库中,自增主键是一种非常实用且常见的设计模式,它能够确保表中的每一条记录都拥有一个唯一的标识符,这对于数据的管理和查询非常重要。本文将详细介绍如何在Oracle中实现自增主键的功能。 #### 创建...

    从实践中学习Oracle SQL

    4. **聚合函数**:如`COUNT()`、`SUM()`、`AVG()`、`MAX()`和`MIN()`,这些函数用于对一组值进行计算,如计算总数、平均值或最大/最小值。 5. **视图**:视图是虚拟表,基于一个或多个表的查询结果。它们提供了一种...

Global site tag (gtag.js) - Google Analytics