今天写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
分享到:
相关推荐
1. CHUNK:CHUNK是分配给LOB段的最小单元,通常是一个Oracle数据块的整数倍,其最小值为数据块的大小,最大值为32KB。数据在读取或写入LOB数据时,也是以CHUNK为单位,而且一个CHUNK中只允许存放一行中的数据。例如...
- `NOMAXVALUE`:表示序列没有最大值限制。 - `MINVALUE 0`:设定序列最小值为0。 - `NOCYCLE`:当序列达到最大或最小值时不再循环。 - `CACHE 20`:预生成20个序列值并缓存,提高性能但可能有数据丢失的风险。 - `...
在 Oracle 中,序列是一个用于生成一系列数字的对象,通常用于为表中的某一列提供连续的数值。创建序列的基本语法如下: ```sql CREATE SEQUENCE sequence_name INCREMENT BY increment_value -- 指定每次生成的...
这里,`<tablename>`需要替换为实际的表名,创建了一个名为`seq_<tablename>`的Sequence,其最小值为1,最大值为一个非常大的数值,起始值为1,每次递增1,并且不缓存值,确保每次获取的都是新的值。 2. **Trigger...
在Oracle数据库中,自增字段通常通过序列(Sequence)和触发器(Trigger)来实现。本篇文章将详细解释如何创建一个自增字段,并通过具体的步骤和代码示例来进行说明。 #### 序列(Sequence) 序列是一种数据库对象...
- `CYCLE` 表示当达到最大值时,序列会重新从最小值开始;`NOCYCLE` 则表示到达边界后停止。 - `CACHE` 用于预先在内存中缓存一定数量的序列值,提高性能;`NOCACHE` 则表示每次请求时都从数据库中获取新值。 接...
序列是Oracle提供的一种自动产生数值的对象,可以用于为表中的某列自动分配唯一的数值。下面是一个创建序列的例子: ```sql CREATE SEQUENCE SEQ_TEST MINVALUE 1 -- 最小值 NOMAXVALUE -- 无最大值限制 START WITH...
以下是如何在 Oracle 中创建自增列的详细步骤和相关知识点: 1. **创建序列(Sequence)** - `CREATE SEQUENCE` 语句用于创建序列。例如: ```sql CREATE SEQUENCE userlogin_seq INCREMENT BY 1 -- 每次增加的...
- **定义**:找出一组数据中的最大值。 - **用途**:适用于需要确定最高值的情况。 ##### 4. AVG - **定义**:计算一组数据的平均值。 - **用途**:适用于需要获取平均指标的场景。 ##### 5. COUNT - **定义**:对...
在此过程中,我们需要定义序列的最小值、初始值、每次增长量以及最大值等参数。 ```sql CREATE SEQUENCE seq_id MINVALUE 1 -- 最小值 START WITH 1 -- 初始值 INCREMENT BY 2 -- 每次增长量 MAXVALUE 999999999999...
假设我们需要创建一个名为`EXAM_NO_SEQ`的序列,其初始值为1484,最大值为9999999999,最小值为1,并且当达到最大值后会循环回到最小值。此外,为了提高性能,我们还设置了缓存大小为20,不指定顺序: ```sql ...
- **MAX()**: 返回指定列的最大值,常用于找出某个字段的最大数值。 - **MIN()**: 返回指定列的最小值,用于找出字段的最小数值。 - **AVG()**: 计算指定列的平均值,适用于数值型数据。 - **SUM()**: 对指定列...
此查询返回的信息通常包括序列名称、当前值、下一个值、最小值、最大值、增量等字段,这些信息对于管理和维护序列非常有用。 #### 三、获取序列的当前值与下一个值 在实际应用中,我们常常需要获取序列的当前值或...
- `CYCLE`: 当序列达到最大值后会循环回到最小值。 - `CACHE cache_size`: 指定预分配并缓存的序列号数量。如果数据库出现故障,则可能会丢失已经缓存但尚未使用的序列号。 例如,根据题目给出的部分内容,创建名为...
本文将详细讲解Oracle中的几个关键概念:视图、索引、同义词和序列,以及它们在查询优化和数据管理中的作用。 首先,我们来谈谈索引。索引是一种特殊的数据库结构,它能够显著提升查询速度。Oracle支持多种类型的...
在Oracle数据库中,自增主键是一种非常实用且常见的设计模式,它能够确保表中的每一条记录都拥有一个唯一的标识符,这对于数据的管理和查询非常重要。本文将详细介绍如何在Oracle中实现自增主键的功能。 #### 创建...
4. **聚合函数**:如`COUNT()`、`SUM()`、`AVG()`、`MAX()`和`MIN()`,这些函数用于对一组值进行计算,如计算总数、平均值或最大/最小值。 5. **视图**:视图是虚拟表,基于一个或多个表的查询结果。它们提供了一种...