mysql - 获取每个列值的前 N ​​个结果

标签 mysql greatest-n-per-group

我有一张这样的表:

+--------+--------+
|  name  |  kind  |
+--------+--------+
| cat    | animal |
| dog    | animal |
| horse  | animal |
| ant    | animal |
| bird   | animal |
| tree   | plant  |
| grass  | plant  |
| carrot | plant  |
|                 |
|     ... etc.    |
+--------+--------+

如何获得每种种类的前 N ​​项?例如。 N=2:

+--------+--------+
|  name  |  kind  |
+--------+--------+
| ant    | animal |
| bird   | animal |
| carrot | plant  |
| grass  | plant  |
+--------+--------+

提前致谢!

最佳答案

这是一个SqlFiddle demo :

select name,kind from
(

select Name,Kind,
      @i:=if(@kind=kind,@i+1,1) rn,
      @kind:=kind 
      from t, (select @i:=0,@kind:='') d 
      order by Kind,name
) t1
where t1.rn<=2
     order by Kind,name

关于mysql - 获取每个列值的前 N ​​个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105893/

相关文章:

php - 在带有列名的关联数组中循环

sql - 使用 postgres rank 函数来限制前 n 个结果

mysql - 检索具有每组最新更改的记录

sql - PostgreSQL 通过 GROUP BY 删除重复项

MySQL 列出带有链接的类别

java - 在 Java 中使用带有 Prepared Statement 的 LIMIT 命令的 MySQL 语法错误

sql - 如何对 ID 字段进行分组并选择在另一个字段 PostgreSQL 中具有最高值的行

mysql - SQL 仅选择列上具有最大值的行

php - 如何为两个相关表创建MYSQL记录源

sql - 如何在mysql中基于类似连接2个表