Home > Database > Mysql Tutorial > Mysql group by top N的问题_MySQL

Mysql group by top N的问题_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-01 13:29:23
Original
1393 people have browsed it

bitsCN.com

Mysql group by top N的问题

 

   在日常工作中,经常要查询分组的前几名.oracle中可以通过row_num来支持查询,mysql暂时不支持row_num.那么如何来完成这个需求呢?

 

   例如:

 

表中的数据:

 

+--------+-------+-----+| Person | Group | Age |+--------+-------+-----+| Bob    | 1     | 32  || Jill   | 1     | 34  || Shawn  | 1     | 42  || Jake   | 2     | 29  || Paul   | 2     | 36  || Laura  | 2     | 39  |+--------+-------+-----+
Copy after login

期望的结果:

+--------+-------+-----+| Shawn  | 1     | 42  || Jill   | 1     | 34  || Laura  | 2     | 39  || Paul   | 2     | 36  |+--------+-------+-----+
Copy after login

方式一:借鉴oracle中row_num的思想,在sql中增加伪列.

set @num := 0, @group := &#39;&#39;;select person, `group`, agefrom (   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;
Copy after login

方式二:利用关联子查询

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
Copy after login

 


bitsCN.com
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template