mysql 查询每个分组前N条记录
mysql 查询每个分组前N条记录
假设存在表movie, 有字段 id, part(地区), mcount(观看次数)
现查询每个地区观看次数最多的3部movie, 则表
###id虽未存在group列表 但不报错,原因未知…
select a.part,a.id, a.mcount from movie a, movie b
#下面的where子句产生迪卡尔积并进行筛选, 最大记录与自己产生一条记录(以自身数据为key), 第二位的 将与最大的数据及自身产生两条数据 ……以次类推
where a.part = b.part and a.mcount <= b.mcount
group by a.part, a.mcount
#选出以(part, mcount)为key的分组中不大于3的分组, 即为所求
having count(a.part) <= 3
由于之前,未完全理解数据含义,并未覆盖所有情况,做出如上结果sql,待朋友给出特殊数据后,才知存在问题。
上面这条语句不能处理有重复的记录如 天津有两个mcount为3但id不同的记录(id表示电影唯一编号, 一个电影可以在多个城市上映,唯号同)
因为若以part, 和mcount为选择条件时 id为1 part天津 mcount 3 与 id为4 part天津 mcount 3的记录 产生的积也符合条件 ,其为key的分组将大于3 被过滤过
可用如下修正过的SQL:
select a.id, a.part, a.mcount from movie a , movie b
#####若mcount不等时产生的积为合法, mcount相等时 判断是否为自身产生,若是,合法;若不是,不合法#####
where a.part = b.part
and ((a.mcount = b.mcount and a.id = b.id) or (a.mcount < b.mcount))
group by a.part, a.mcount, a.id ###三个字段为key进行分组
having count(*) <= 3
order by part, mcount desc
执行结果为:
坏处: 自身进行迪卡尔积,若数据量大, 产生中间临时数据将过大
http://www.cnblogs.com/barrenlake/p/4399245.html
mysql 查询每个分组前N条记录的更多相关文章
- MSSQL 查询分组前N条记录
sql语句中,查询分组中前n条记录的sql语句如下 第一种方法 select * from consultingfeebill awhere n>(select count(*) from co ...
- MySQL每个分类的前几条记录
MySQL 获取所有分类和每个分类的前几条记录 比如有文章表 Article(Id,Category,InsertDate) 现在要用SQL找出每种类型中时间最新的前N个数据组成的集合 SELECT ...
- MYSQL 查询日期最大的那条记录
首先把官网示例拿出来: 连接查询比子查询性能更好 3.6.4 The Rows Holding the Group-wise Maximum of a Certain Column Task: For ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name ...
- mysql使用GROUP BY分组实现取前N条记录的方法
MySQL中GROUP BY分组取前N条记录实现 mysql分组,取记录 GROUP BY之后如何取每组的前两位下面我来讲述mysql中GROUP BY分组取前N条记录实现方法. 这是测试表(也不知道 ...
- [mysql] 查询前几条记录
From: http://www.cnblogs.com/xuxm2007/archive/2010/11/16/1878211.html SELECT * FROM table LI ...
- mysql查询各种类型的前N条记录
mysql查询各种类型的前N条记录,将3改为N(需查询条数)即可 (select * from event_info where event_type = 1 limit 3)union all( ...
- MySQL中的RAND()函数使用详解(order by rand() 随机查询取前几条记录)
MySQL RAND()函数调用可以在0和1之间产生一个随机数: mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+--- ...
- mysql 分组统计、排序、取前N条记录解决方案
需要在mysql中解决记录的分组统计.排序,并抽取前10条记录的功能.现已解决,解决方案如下: 1)表结构 CREATE TABLE `policy_keywords_rel` ( `id` int( ...
随机推荐
- 深度优先搜索-linux上浅显易懂的例子
上次看啊哈算法中的深度优先搜索,自己用的是linux(linux粉,windows黑,嘿嘿),字符界面,为了强化对这个的理解,就在linux上对这个例子的代码做了一点修改可以很清楚的看到整个搜索过程, ...
- Cantor表(中等)
2 3 1/2 2/1 题目分析 这是NoI的一道题目,不过题目比较有创意也比较适合新生,就是一道简单的找规律的题目,首先找到第N个数应该在第几个斜行,然后判断这一行是奇数还是偶数,偶数分母递减,分子 ...
- Java中的不可变类
概念:不可变类的意思是创建该类的实例后,该实例的属性是不可改变的.java中的8个包装类和String类都是不可变类.所以不可变类并不是指该类是被final修饰的,而是指该类的属性是被final修饰的 ...
- nav标签的作用
. <nav>用来将具有导航性质的链接划分在一起,使代码结构在语义化方面更加准确,同时对于屏幕阅读器等设备的支持也更好.一直以来,我们习惯于使用形如<div id="nav ...
- c#中WebBrowser控件的使用方法
首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...
- 【JavaScript】深入分析JavaScript的关系运算和if语句
JavaScript的关系运算,没有我原想的那么简单.等终于理清它的运算逻辑之后,我的头大了至少一圈.而if语句的真假判定逻辑本身不难,但要把它和关系运算联系起来,相信你会和我一样,到达崩溃边缘.不信 ...
- [转] The Single Biggest Obstacle to Trading Success
Why do some people succeed spectacularly in the market while others fail? The market is the same for ...
- [转] DAG算法在hadoop中的应用
http://jiezhu2007.iteye.com/blog/2041422 大学里面数据结构里面有专门的一章图论,可惜当年没有认真学习,现在不得不再次捡 起来.真是少壮不努力,老大徒伤悲呀!什么 ...
- (转) Android平台上关于IM的实践总结
前言 IM通信在互联网发展到现在已经是码农的世界里人尽皆知的技术,特别在当下移动互联网迅猛发展的时代这种技术的开发也更加火热,其中老牌的代表作就有QQ和MSN,和最近新崛起的微信,默默,易信,来往等眼 ...
- CentOS 7 安装教程
参考资料: http://www.cnblogs.com/bobbylinux/articles/centos7.html