博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[mysql] 先按某字段分组再取每组中前N条记录
阅读量:6908 次
发布时间:2019-06-27

本文共 1785 字,大约阅读时间需要 5 分钟。

  hot3.png

摘自:

create table t2 (

    id int primary key,
    gid    char,
    col1    int,
    col2    int
) engine=myisam;
insert into t2 values 
(1,'A',31,6),
(2,'B',25,83),
(3,'C',76,21),
(4,'D',63,56),
(5,'E',3,17),
(6,'A',29,97),
(7,'B',88,63),
(8,'C',16,22),
(9,'D',25,43),
(10,'E',45,28),
(11,'A',2,78),
(12,'B',30,79),
(13,'C',96,73),
(14,'D',37,40),
(15,'E',14,86),
(16,'A',32,67),
(17,'B',84,38),
(18,'C',27,9),
(19,'D',31,21),
(20,'E',80,63),
(21,'A',89,9),
(22,'B',15,22),
(23,'C',46,84),
(24,'D',54,79),
(25,'E',85,64),
(26,'A',87,13),
(27,'B',40,45),
(28,'C',34,90),
(29,'D',63,8),
(30,'E',66,40),
(31,'A',83,49),
(32,'B',4,90),
(33,'C',81,7),
(34,'D',11,12),
(35,'E',85,10),
(36,'A',39,75),
(37,'B',22,39),
(38,'C',76,67),
(39,'D',20,11),
(40,'E',81,36);
期望结果
1) N=1 取GID每组 COL2最大的记录
    +----+------+------+------+
    | id | gid  | col1 | col2 |
    +----+------+------+------+
    |  6 | A    |   29 |   97 |
    | 15 | E    |   14 |   86 |
    | 24 | D    |   54 |   79 |
    | 28 | C    |   34 |   90 |
    | 32 | B    |    4 |   90 |
    +----+------+------+------+
2) N=3 取GID每组 COL2最大的3条记录
    +----+------+------+------+
    | id | gid  | col1 | col2 |
    +----+------+------+------+
    |  6 | A    |   29 |   97 |
    | 11 | A    |    2 |   78 |
    | 36 | A    |   39 |   75 |
    | 32 | B    |    4 |   90 |
    |  2 | B    |   25 |   83 |
    | 12 | B    |   30 |   79 |
    | 28 | C    |   34 |   90 |
    | 23 | C    |   46 |   84 |
    | 13 | C    |   96 |   73 |
    | 24 | D    |   54 |   79 |
    |  4 | D    |   63 |   56 |
    |  9 | D    |   25 |   43 |
    | 15 | E    |   14 |   86 |
    | 25 | E    |   85 |   64 |
    | 20 | E    |   80 |   63 |
    +----+------+------+------+
SELECT a.id,a.gid,a.col1,a.col2 FROM t2 a
LEFT JOIN t2 b
ON a.gid=b.gid AND a.col2<=b.col2
GROUP BY a.id,a.gid,a.col1,a.col2
HAVING COUNT(b.id)<=3
ORDER BY a.gid,a.col2 desc
SELECT a.id,a.gid,a.col1,a.col2 FROM t2 a
WHERE 3>=(
SELECT COUNT(*) FROM t2 b
WHERE a.gid=b.gid AND a.col2<=b.col2)
ORDER BY a.gid,a.col2 desc

转载于:https://my.oschina.net/muziH/blog/1476552

你可能感兴趣的文章
从网络获取图片示例
查看>>
【转】手机测试入行三年的感想
查看>>
Post-Build Event command line
查看>>
LeetCode:Edit Distance
查看>>
xpath NOT IE
查看>>
爬取校园新闻首页的新闻
查看>>
JavaEE中Web服务器、Web容器、Application服务器区别及联系
查看>>
Java获取本机mac地址
查看>>
C++和Java中的i+++i++
查看>>
【I - ECJTU_ACM 11级队员2012年暑假训练赛(2)】
查看>>
Zookeeper + Guava loading cache 实现分布式缓存
查看>>
caffe项目工程化封装FRCNN
查看>>
Javascript闭包(Closure)
查看>>
Django 使用简单笔记
查看>>
1.网络层次划分
查看>>
redis的bigkey扫描脚本
查看>>
【OCP-12c】2019年CUUG OCP 071考试题库(73题)
查看>>
C#程序编写规范
查看>>
3.0 Windows和Linux双系统安装(3)
查看>>
tomcat 产生heapdump文件配置
查看>>