zoukankan      html  css  js  c++  java
  • [mysql] 先按某字段分组再取每组中前N条记录

    From: http://blog.chinaunix.net/uid-26729093-id-4294287.html

    请参考:http://bbs.csdn.net/topics/330021260

    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

  • 相关阅读:
    Android中的数据结构
    Android之makefile
    AndroidMainfest详解
    源码分析之AsyncTask
    源码分析之AsyncTask
    优化apk的odex处理
    arguments简单函数 求整数递加和
    js提取DOM属性和设置DOM属性值
    var定义变量的使用细节
    关于ID命名 一个页面唯一
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/4334132.html
Copyright © 2011-2022 走看看