返回最值所在行数据

创建测试用表:

CREATE OR REPLACE VIEW v AS
SELECT ‘10‘ AS depno, ‘101‘ AS empno, ‘A‘ AS ename, ‘2000‘ AS sal FROM DUAL
UNION ALL
SELECT ‘10‘ AS depno, ‘102‘ AS empno, ‘B‘ AS ename, ‘1000‘ AS sal FROM DUAL
UNION ALL
SELECT ‘10‘ AS depno, ‘103‘ AS empno, ‘C‘ AS ename, ‘2500‘ AS sal FROM DUAL
UNION ALL
SELECT ‘20‘ AS depno, ‘104‘ AS empno, ‘D‘ AS ename, ‘2000‘ AS sal FROM DUAL
UNION ALL
SELECT ‘20‘ AS depno, ‘105‘ AS empno, ‘E‘ AS ename, ‘4000‘ AS sal FROM DUAL
UNION ALL
SELECT ‘20‘ AS depno, ‘106‘ AS empno, ‘F‘ AS ename, ‘4000‘ AS sal FROM DUAL;

SELECT * FROM v;

SQL代码如下:

SELECT depno,
       empno,
       MAX(ename) KEEP(DENSE_RANK FIRST ORDER BY sal) OVER(PARTITION BY depno) AS min,
       MAX(ename) KEEP(DENSE_RANK LAST ORDER BY sal) OVER(PARTITION BY depno) AS max,
       ename,
       sal
  FROM v
 ORDER BY depno, sal DESC;

执行结果如下:

另外,first、last语句也可以放在group里,与其他聚合函数一起使用,这时要去掉后面的over(partition by xxx):

SELECT depno,
       MIN(sal) AS min_sal,
       MAX(ename) KEEP(DENSE_RANK FIRST ORDER BY sal) AS min_name,
       MAX(sal) AS max_sal,
       MAX(ename) KEEP(DENSE_RANK LAST ORDER BY sal) AS max_nam
  FROM v
 GROUP BY depno;

时间: 2024-10-06 18:09:11

返回最值所在行数据的相关文章

现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值

问题描述:现在有m组n个有序数组,例如{1,2,3,4},{2,3,4,6},{1,3,5,7},在这些数组中选择第k小的数据,然后返回这个值 思路:参照两个数组归并的过程,每次选取最小的数据进行比较 1,定义选取位置数组index[m],初始化为0 2,每次根据index[m]寻找到第l_row个数组,确保当前时刻的第l_row数组的当前位置为最小值:寻找时确保index[i]的值小于n 3,把最小值取出,index[l_row]自增1 4,逐次寻找,知道找到第k个为止 1 public st

(原创)c#学习笔记06--函数02--变量的作用域02--参数和返回值与全局数据

6.2.2  参数和返回值与全局数据 本节将详细介绍如何通过全局数据以及参数和返回值与函数交换数据.先看看下面的代码: class Program { static void ShowDouble(ref int val) { val *= 2; Console.WriteLine("val doubled = {0}", val); } static void Main(string[] args) { int val = 5; Console.WriteLine("val

按某一字段分组取最大(小)值所在行的数据 分拆列值(转) 日期的推算

数据如下:name val memoa 2 a2(a的第二个值)a 1 a1--a的第一个值a 3 a3:a的第三个值b 1 b1--b的第一个值b 3 b3:b的第三个值b 2 b2b2b2b2b 4 b4b4b 5 b5b5b5b5b5*/--创建表并插入数据:create table tb(name varchar(10),val int,memo varchar(20))insert into tb values('a', 2, 'a2(a的第二个值)')insert into tb v

c指针 --笔记2返回指针值的函数

返回指针值的函数 一般带回指针值的函数,定义形式为: int *a (int x, int y); 看这个经典案例: #include <stdio.h> int main(int argc, char const *argv[]) { double score[][4] = {{60.0, 70.0, 80.5, 20.1}, {60.0, 70.0, 80.5, 21.1}, {60.0, 70.0, 80.5, 22.1}}; double *search(double(*pointer

【笔记】关于jq $.ajax 函数 success回调函数不能赋正确值或返回正确值的问题

最近在一个项目里面打算实现如下功能: 当我注册账号的时候当输入账号完毕后输入框失焦时执行一个 ajax 请求,验证账号是否被注册,并未这个输入框的 isCorrect属性赋值,如果没有被注册 isCorrect属性值为"true",否则为 "false".代码如下: ajax: function(obj){ /* { elem: //验证的元素, hintsContent: //提示框元素, errorColor: //错误时显示的颜色, url: //后台处理页地

在Fragment中OnActivityResult方法中接收Activity中返回的值

在Fragment中OnActivityResult方法中接收Activity中返回的值 在Fragment中OnActivityResult方法中接收Activity中返回的值,有需要的朋友可以参考下. 在开发android中,有些人往往很疑惑,当一个FragmentActivity中有多个碎片的时候,如a,b,c三个碎片, 其中b中进行了操作,跳转到了新的界面D(activity).但是当D操作完后,返回值到碎片b.那么问题就来了,肯定会有人问,b是一个碎片,如何才能接收到D传过来的值呢?

POJ 2828 poj 2828 Buy Tickets 【树状数组,已知前n项和为K,返回n值】

题目链接:http://poj.org/problem?id=2828 在一个队列中,一个人想要插队,告诉你每个新来的人会插在i个人后面,求出最后的队列. 如果我们用模拟的话,那么时间复杂度肯定是超了:想想,如果我们逆序,那么最后来的人的位置一定是固定的,这样的话,我们将问题转化成逆序扫描给出数据,插在i个人后面这个数据就变成了在这个人前面需要留出多少个空位.如此我们只需要用树状数组记录前n项总共有多少个空位,每扫描一个数据,就找出能使得他前面正好有i个空位. 这题用树状数组或者线段树都可以,今

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform)让用户方便的操作数据库中的数据. 什么是ADO.NET 是一组库类,System.Data. Ado.net组成 Connection:用来连接数据库 Command:用来执行SQL语句 DataReader:只读.只进的结果集,一条一条读取数据(SteamReader.XmlReader) Da

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear