- 浏览: 460350 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mrshen:
很棒,在其他大神的博客上理清了思路看懂之后,来lz这里用例子学 ...
RED-BLACK(红黑)树的实现TreeMap源码阅读 -
a939639017:
yanf4j check不下来 ?
Java nio 2.0 AIO -
hellostory:
又是抄来的 - -
mysql分表方案 -
davidluoye:
为什么不说下支持的数据库呢?
模糊查询的优化 -
oliveevilo:
表示没看懂
Synchronized和java.util.concurrent.locks.Lock的区别
分组取最大
- --按某一字段分组取最大(小)值所在行的数据(2007-10-23于浙江杭州)
- /*
- 数据如下:
- name val memo
- a 2 a2(a的第二个值)
- a 1 a1--a的第一个值
- a 3 a3:a的第三个值
- b 1 b1--b的第一个值
- b 3 b3:b的第三个值
- b 2 b2b2b2b2
- b 4 b4b4
- b 5 b5b5b5b5b5
- */
- --创建表并插入数据:
- create table tb(name varchar(10),val int,memo varchar(20))
- insert into tb values('a', 2, 'a2(a的第二个值)')
- insert into tb values('a', 1, 'a1--a的第一个值')
- insert into tb values('a', 3, 'a3:a的第三个值')
- insert into tb values('b', 1, 'b1--b的第一个值')
- insert into tb values('b', 3, 'b3:b的第三个值')
- insert into tb values('b', 2, 'b2b2b2b2')
- insert into tb values('b', 4, 'b4b4')
- insert into tb values('b', 5, 'b5b5b5b5b5')
- go
- --一、按name分组取val最大的值所在行的数据。
- --方法1:
- select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
- --方法2:
- select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
- --方法3:
- select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
- --方法4:
- select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
- --方法5
- select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 3 a3:a的第三个值
- b 5 b5b5b5b5b5
- */
- --二、按name分组取val最小的值所在行的数据。
- --方法1:
- select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
- --方法2:
- select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
- --方法3:
- select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
- --方法4:
- select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
- --方法5
- select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val < a.val) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 1 a1--a的第一个值
- b 1 b1--b的第一个值
- */
- --三、按name分组取第一次出现的行所在的数据。
- select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 2 a2(a的第二个值)
- b 1 b1--b的第一个值
- */
- --四、按name分组随机取一条数据。
- select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 1 a1--a的第一个值
- b 5 b5b5b5b5b5
- */
- --五、按name分组取最小的两个(N个)val
- select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val
- select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
- select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 1 a1--a的第一个值
- a 2 a2(a的第二个值)
- b 1 b1--b的第一个值
- b 2 b2b2b2b2
- */
- --六、按name分组取最大的两个(N个)val
- select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name,a.val
- select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val
- select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name
- /*
- name val memo
- ---------- ----------- --------------------
- a 2 a2(a的第二个值)
- a 3 a3:a的第三个值
- b 4 b4b4
- b 5 b5b5b5b5b5
- */
评论
2 楼
dotjar
2011-03-21
28和30行的方法一和方法二半小时过去了,结果还出不来。我停掉了。
1 楼
dotjar
2011-03-21
在没有建立索引的情况下,查询表24167056条记录测试结果:
1-->
34行那个查询我的表花费:187.984s出来结果;
28行那个则超过5分钟都还没有结果;
继续测试中。。。
1-->
34行那个查询我的表花费:187.984s出来结果;
28行那个则超过5分钟都还没有结果;
继续测试中。。。
发表评论
-
navicat快捷键
2013-01-05 09:47 13461.ctrl+q 打开查询窗口2.ctrl ... -
mysql分表方案
2012-09-05 22:29 9027一、 概述分表是个目前算是比较炒的比较流行的概念,特别是在 ... -
mysql扩展至分库分表
2012-09-05 21:47 4003MySQL互联网Oracle企业应 ... -
批量修改SEQUENCE,序列同时增加10000
2012-06-26 16:40 1599select 'alter sequence ' || t1. ... -
oracle执行计划
2011-08-23 14:13 1087本文全面详细介绍oracle执行计划的相关的概念,访问数据 ... -
Oracle分页,Oracle中rownum与rowid的理解
2011-08-15 21:33 1843一、 oracle ... -
oracle--如何分析执行计划
2011-08-15 21:31 4220例1: 假设LARGE_TABLE ... -
Oracle优化----索引原理篇
2011-08-15 21:22 9612006-04-04 15:09 1561人阅读 评论(0) ... -
ORACLE执行计划
2011-06-22 17:27 14511 ,什么是执行计划 所谓执行计划,顾名思义,就是对一 ... -
MYSQL 字符
2011-04-23 00:05 1010因为不知道什么时候 ... -
ORACLE用户管理
2011-04-22 14:40 1364这里将介绍Oracle修改用户权限的实现过程,包括一些权限管 ... -
数据库表设计细节
2011-04-11 22:48 1929数据库建表原则 数据 ... -
数据库设计的14个技巧
2011-04-11 22:19 9761. 原始单据与实体之间的关系 可以是一对一、一对多、多对 ... -
ORACLE xmltype 遍历
2011-03-14 16:05 1954DECLARE var XMLType; ... -
ORACLE EXCEPTION总结
2011-03-14 14:53 1373文章分类:数据库 关键字: oracle 一 ORACLE ... -
Oracle存储过程解析XML,并把数据持久化
2011-03-14 14:52 1876需要解析的xml文件:people.xml 1 < ... -
oracle对大对象类型操作:blob,clob,nclob,bfile
2011-03-14 14:49 17933-4 Lob类型 ... -
impdp expdp使用小结
2011-03-11 17:29 2262\ 最近我们迁移数据库,其中涉及到了数据迁移 sql ... -
oracle表空间限额不足问题解决
2011-03-11 16:37 1263web程序访问数据库是,总是报 表空间“hnsd”限额不 ... -
ORACLE JOB
2011-03-11 15:56 1144、设置初始化参数 job_qu ...
相关推荐
按某一字段分组取最大(小)值所在行的数据
MySql实现分组取n条最大记录,还在为分组取最大困扰么?
主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组
使用Linq语法与Lambda表达式分组取泛型数组某列的最小值/最大值
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...
pandas获取groupby分组里最大值所在的行方法 如下面这个DataFrame,按照Mt分组,取出Count最大的那行 import pandas as pd df = pd.DataFrame({'Sp':['a','b','c','d','e','f'], 'Mt':['s1', 's1', 's2','s2','s2','...
主要介绍了 mysql获取分组后每组的最大值实例详解的相关资料,需要的朋友可以参考下
表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录
该脚本包含递归查询、删除数据表中重复数据、分组取最大记录,行列互转、多行合并等不常见但是非常实用的oracle函数并附带详细的实例持续更新中
深入理解Linux,供大家分享,很不错的资料哦。
MSSQL 多字段根据范围求最大值实现语句,大家可以参考下
主要介绍了JAVA8 stream中三个参数的reduce方法对List进行分组统计操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
若打算使总的时延为最小,问分组的数据部分长度p应取为多大?(提示:参 考图1-12的分组交换部分,观察总的时延是由哪几部分组成。) 答:总时延D表达式,分组交换时延为:D= kd+(x/p)*((p+h)/b)+ (k-1)*(p+h)/b D...
group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。因此要搞懂group by 后 带 ...
若打算使总的时延为最小,问分组的数据部分长度p应取为多大?(提示:参 考图1-12的分组交换部分,观察总的时延是由哪几部分组成。) 答:总时延D表达式,分组交换时延为:D= kd+(x/p)*((p+h)/b)+ (k-1)*(p+h)/b D...
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
若打算使总的时延为最小,问分组的数据部分长度p应取为多大? 答:分组个数x/p, 传输的总比特数:(p+h)x/p 源发送时延:(p+h)x/pb 最后一个分组经过k-1个分组交换机的转发,中间发送时延:(k-1)(p+h)/b 总发送时延D...