- 浏览: 1333868 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
(转)http://blog.csdn.net/acmain_chm/article/details/4126306
经常看到问题,如何取出每组的前N条记录。方便大家参考于是便把常见的几种解法列出于下。
问题:有表 如下,要求取出各班前两名(允许并列第二)
Table1
+----+------+------+-----+
| id |SName |ClsNo |Score|
+----+------+------+-----+
| 1 |AAAA | C1 | 67 |
| 2 |BBBB | C1 | 55 |
| 3 |CCCC | C1 | 67 |
| 4 |DDDD | C1 | 65 |
| 5 |EEEE | C1 | 95 |
| 6 |FFFF | C2 | 57 |
| 7 |GGGG | C2 | 87 |
| 8 |HHHH | C2 | 74 |
| 9 |IIII | C2 | 52 |
| 10 |JJJJ | C2 | 81 |
| 11 |KKKK | C2 | 67 |
| 12 |LLLL | C2 | 66 |
| 13 |MMMM | C2 | 63 |
| 14 |NNNN | C3 | 99 |
| 15 |OOOO | C3 | 50 |
| 16 |PPPP | C3 | 59 |
| 17 |QQQQ | C3 | 66 |
| 18 |RRRR | C3 | 76 |
| 19 |SSSS | C3 | 50 |
| 20 |TTTT | C3 | 50 |
| 21 |UUUU | C3 | 64 |
| 22 |VVVV | C3 | 74 |
+----+------+------+-----+
结果如下
+----+------+------+-----+
| id |SName |ClsNo |Score|
+----+------+------+-----+
| 5 |EEEE | C1 | 95 |
| 1 |AAAA | C1 | 67 |
| 3 |CCCC | C1 | 67 |
| 7 |GGGG | C2 | 87 |
| 10 |JJJJ | C2 | 81 |
| 14 |NNNN | C3 | 99 |
| 18 |RRRR | C3 | 76 |
+----+------+------+-----+
方法一:
select a.id,a.SName,a.ClsNo,a.Score
from Table1 a left join Table1 b on a.ClsNo=b.ClsNo and a.Score<b.Score
group by a.id,a.SName,a.ClsNo,a.Score
having count(b.id)<2
order by a.ClsNo,a.Score desc
方法二:
select *
from Table1 a
where 2>(select count(*) from Table1 where ClsNo=a.ClsNo and Score>a.Score)
order by a.ClsNo,a.Score desc
方法三:
select *
from Table1 a
where id in (select id from Table1 where ClsNo=a.ClsNo order by Score desc limit 2)
order by a.ClsNo,a.Score desc
方法....
这里列出了多种SQL语句的实现方法,有些是MySQL特有的(Limit, 其它数据库可根据实际更改,比如oracle的rownum,MS SQL SERVER 的 top,..),有时是SQL标准支持的。但效率上和应用的场合或许不同。具体应用时可根据实际表中的记录情况,索引情况进行选择。
特例 N=1 ,即取最大的/最小的一条记录。
+----+------+------+-----+
| id |SName |ClsNo |Score|
+----+------+------+-----+
| 5 |EEEE | C1 | 95 |
| 7 |GGGG | C2 | 87 |
| 14 |NNNN | C3 | 99 |
+----+------+------+-----+
select *
from Table1 a
where not exists (select 1 from Table1 where ClsNo=a.ClsNo and Score>a.Score);
select a.*
from Table1 a inner join (select ClsNo, max(Score) as mScore from Table1 group by ClsNo) b
on a.ClsNo=b.ClsNo and a.Score=b.Score
select *
from (select * from Table1 order by Score desc) t
group by ClsNo
发表评论
-
mysql主从热备配置(含innodb)终极版
2012-12-25 13:10 2654转自 http://blogread.cn/it/articl ... -
sqlite3中的数据类型
2012-12-10 21:37 1338(转)http://www.cnblogs.com/kfqco ... -
Mac下MySql卸载方法
2012-09-10 23:57 1056Mac下MySql卸载方法 mac下mysql的D ... -
mac os x mysql数据库utf8配置
2012-09-10 23:29 2284进入mysql console: 输入 mysql& ... -
ON DUPLICATE KEY UPDATE
2012-08-07 01:47 1095(转自)http://blog.csdn.net/kesaih ... -
MySQL单列索引和组合索引的区别介绍
2012-08-07 01:31 1107(转自)http://blog.cs ... -
centos下MySQL主从同步配置
2012-08-03 13:14 1561(转自)http://apps.hi.baidu.com ... -
sql语句中left join、inner join中的on与where的区别
2012-06-13 13:24 1265table a(id, type): id t ... -
如何一条sql语句取出分组数据中值最大的
2012-05-30 23:59 2369--按某一字段分组取最大(小)值所在行的数据(2007-10- ... -
存储过程与函数的区别
2011-09-28 19:35 1160... -
RMAN备份方案
2011-07-21 10:29 2062RMAN备份方案 RMAN也可以进行联机备份,而且备份与恢 ... -
oracle
2011-04-06 17:46 1051学习笔记 -
PLSQL Developer + Oracle客户端简易安装方法
2011-03-17 00:10 14384Oracle 10g绿色客户端 pl ... -
SELECT INTO FROM与INSERT INTO SELECT
2011-01-26 15:52 34111.INSERT INTO SELECT语句 ... -
浅谈unique列上插入重复值的MySQL解决方案
2011-01-25 11:33 1783本文的unique列上插入重复值解决方案,主要基于MySQL平 ... -
:Oracle 中对Merge语句的增强 和去重复新增
2011-01-25 11:11 2325在Oracle 10g之前,merge语句支持匹配更新和不匹配 ... -
单行函数(仅对单个表达式或一行进行处理)
2011-01-23 18:49 1274例如:select sum(qty) from sales ... -
oracle中的事务控制命令
2011-01-23 18:45 2113事务提交有显示提交:使用commit命令来提交所有未提交的更新 ... -
oracle全文检索
2011-01-23 18:18 61581.全文检索和普通检索的区别 不使用Oracle text功 ... -
Oracle快照原理及实现总结
2011-01-23 16:41 2474Oracle数据库的快照是一个表,它包含有对一个本地或远程数据 ...
相关推荐
GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法。 这是测试表(也不知道怎么想的,当时表名直接敲了个aa,汗~~~~): 结果: 方法一: 代码如下:SELECT a.id,a.SName,a.ClsNo...
标题“分组并排序取前N”涉及到数据库查询中的一个重要概念,这通常指的是在SQL查询中使用`GROUP BY`、`ORDER BY`以及`LIMIT`子句来对数据进行分组、排序,并提取出每组中排名靠前的N条记录。在数据库管理中,这种...
–按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: 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 ...
本篇文章详细介绍了如何使用MySQL实现分组取n条最大记录的功能。通过精心设计的SQL查询语句,我们可以有效地解决这类问题。这种方法不仅适用于上述具体场景,还可以扩展应用于其他类似的需求,例如按不同标准分组并...
在这篇文档中,我们将详细学习在Hive中如何进行分组取topN,以及如何使用row_number()、rank()和dense_rank()三种窗口函数进行数据排序和排名。 首先,Hive中的数据表创建和数据插入操作是数据查询和分析的前提。...
最后,**取其前N**,即筛选出每个组别中的前N个记录,通常是最高或最低的N个。在数据查询界面,针对“Grouping Columns”的列设置“TopN”选项。点击“Grouping Options”,在弹出的界面中,你可以设置前N或后N的...
在实际工作中,我们经常需要对数据进行分组操作,并从每个组中提取特定的记录,例如每组的前几行。`groupby`函数是pandas中实现这一功能的关键,结合`head()`方法,可以方便地完成这一任务。下面我们将详细讲解如何...
打个比方你要查询每月排名前十的那些记录,或者每月销售前十的车辆。
本篇文章将深入探讨如何使用 `pandas groupby` 分组并获取每组的前几行记录。 `pandas groupby` 方法允许我们将数据按照一个或多个列的值进行分组,这样可以对每个分组执行聚合操作,如计算平均值、求和、计数等。...
在SQL查询中,当需要对分组数据进行排序并选取每组的前N个记录时,通常会使用几种不同的技术。这里我们主要讨论四种方法:游标方法、Count查询、Cross Apply方法以及Row_Number函数,并重点分析在大量数据下哪种方法...
在MySQL数据库中,获取每个分类的前N条记录是一个常见的查询需求,特别是在处理如文章、商品、用户等分组信息时。以下将详细介绍如何通过SQL语句实现这一功能,并给出三个示例。 首先,我们需要理解基本的SQL语法,...
"N-UP"是数据窗口的一个特殊显示模式,它允许在同一页面上并排显示多条记录,通常用于打印报表或者对比分析。在这个“PB 纵向显示N-UP类型的数据窗口例子”中,我们将探讨如何实现这种显示模式。 首先,我们需要...
为了实现对浏览记录的分组,本文提供了一个示例函数`groupVisit`,该函数接收一个包含多个访问记录的数组作为输入,并按照记录中的访问时间戳`visittime`对记录进行分组。分组的依据是日期,相同日期的记录会被归类...
您可能感兴趣的文章:分组后分组合计以及总计SQL语句(稍微整理了一下)MYSQL每隔10分钟进行分组统计的实现方法mysql使用GROUP BY分组实现取前N条记录的方法详解MySQL中的分组查询与连接查询语句sql server如何利用...
例如,如果一个表有数百万行,我们可能只想看每个业务单元(如客户ID、产品ID等)的前10%记录,以进行初步分析或性能评估。`NTILE`函数可以帮助我们在不牺牲效率的情况下完成这个任务。 总结起来,`NTILE`函数是SQL...
`, `{n}`, `{n,}` 和 `{n,m}` 分别表示零个或多个、一个或多个、零个或一个、精确匹配n个、至少n个但不超过m个前面的字符或字符组。 3. **分组**:使用圆括号`()`将多个字符组合成一个整体,可以作为一个单位来处理...
在待排序的 n 个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录...
* Shellsort():希尔排序算法,先取定一个正整数 d1<n,把全部记录分成 d1 个组,所有距离为 d1 倍数的记录放在一组中,在各组内进行插入排序,然后取 d2重复上述分组和排序工作,直至取 di=1,即所有记录放在一个组...