Mysql group by top N的问题(转)
在日常工作中,经常要查询分组的前几名.oracle中可以通过row_num来支持查询,mysql暂时不支持row_num.那么如何来完成这个需求呢?
例如:
表中的数据:
1
2
3
4
5
6
7
8
9
10
|
+ --------+-------+-----+
| Person | Group | Age |
+ --------+-------+-----+
| Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | + --------+-------+-----+
|
期望的结果:
1
2
3
4
5
6
|
+ --------+-------+-----+
| Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paul | 2 | 36 | + --------+-------+-----+
|
方式一:借鉴oracle中row_num的思想,在sql中增加伪列.
1
2
3
4
5
6
7
8
9
10
11
12
|
set @num := 0, @ group := '' ;
select person, ` group `, age
from ( select person, ` group `, age,
@num := if(@ group = ` group `, @num + 1, 1) as row_number,
@ group := ` group ` as dummy
from mytable
order by ` Group `, Age desc , person
) as x
where x.row_number <= 2;
|
方式二:利用关联子查询
1
2
3
4
|
SELECT a.person, a. group , a.age FROM person AS a WHERE
( SELECT COUNT (*) FROM person AS b
WHERE b. group = a. group AND b.age >= a.age) <= 2
ORDER BY a. group ASC , a.age DESC
|
相关推荐
mysql> select * from MyClass order by id limit 0,2; 或者: mysql> select * from MyClass limit 0,2; 6、删除表中数据 命令:delete from 表名 where 表达式 例如:删除表 MyClass中编号为 的记录 mysql>...
mysql> select * from MyClass order by id limit 0,2; 或者: mysql> select * from MyClass limit 0,2; 6、删除表中数据 命令:delete from 表名 where 表达式 例如:删除表 MyClass中编号为1 的记录 mysql> ...
5.用子查询作派生的表:select 年龄,count(*) as 相同年龄 from (select top 10 年龄 from kjbdsjk order by 编号) as t group by 年龄 6.把子查询作为表达式:select t.职业,t.平均年龄 from (select 职业,avg(年龄)...
3.1 Group By 28 3.2 Order /Sort By 28 4. Hive Join 29 5. HIVE参数设置 31 6. HIVE UDF 33 6.1 基本函数 33 6.1.1 关系操作符 33 6.1.2 代数操作符 34 6.1.3 逻辑操作符 35 6.1.4 复杂类型操作符 35 6.1.5 内建...
3.1 Group By 28 3.2 Order /Sort By 28 4. Hive Join 29 5. HIVE参数设置 31 6. HIVE UDF 33 6.1 基本函数 33 6.1.1 关系操作符 33 6.1.2 代数操作符 34 6.1.3 逻辑操作符 35 6.1.4 复杂类型操作符 35 6.1.5 内建...
CHAPTER 1 Introduction to MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Database, ...
Learn by tinkering 19 WordPress plugin API 19 PHP references 19 CSS 19 JavaScript 20 Troubleshooting plugins 20 Editing plugins 21 Summary 22 Table of Contents [ ii ] Chapter 2: Generating ...
图书馆借阅系统数据库设计 2.5.1 按借阅表查询历史借阅信息 (用1表示已经归还,0表示未归还) select * from Borrow ... GROUP BY Borrow.Bno order by Borrow.Bno desc )temp where Book.Bno=temp.Bno
4.5 DQL之分组查询group by 4.6 DQL之排序查询order by 4.7 DQL之分页查询limit 4.8 DQL之结果保存 第五章:多表复杂分析查询 5.1 多表查询:表与表之间的关系 5.2 多表查询:Join关联 5.3 多表查询:子查询 第六...
3.4 分组 (Group By) 3.5 组内条件 (Having) 3.6 排序 (Order By) 3.7 数据表的内连接、外连接 3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,...
3.4 分组 (Group By) 3.5 组内条件 (Having) 3.6 排序 (Order By) 3.7 数据表的内连接、外连接 3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_SQL,...
[Group by group_by_expression] [Having group_condition] …… [Order by column]; --最后 三、常用简单语句: clear screen:清屏 edit:编辑刚才的一句。 desc/describe:(列出所有列名称) 用法: ...
in Chapter 1 but aren’t used in Chapters 2, 3, and 4. It also introduces another new technique: keeping track of the previous row you processed and the row you’re currently processing, in order to ...
mysql select * From 表名 Order By rand() Limit n Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查) 语法 select table1.fd1,table1,fd2,...
TopN 下推 Limit 下推 4.提供了索引相关支持 谓词转化聚簇索引范围 谓词转化次级索引 Index Only 查询优化 运行时索引退化扫表优化 5.提供了基于代价优化 统计信息支持 索引选择 广播表代价估算 6.多种 ...