mysql求分组的前3名

具体思路就是,查询出当前数据表里,每一条数据在当前分组里的排名。-- 效率不咋滴 谁有更好的方法--

SELECT

    a.*
FROM
    (
        SELECT
            t1.*,
            (
                SELECT
                    count(*) + 1
                FROM
                    tst
                WHERE
                    test = t1.test
                AND num > t1.num
            ) AS bbb
        FROM
            tst t1
    ) AS a
WHERE
    bbb <= 3
ORDER BY
    test,

    num DESC

实现的sql

===测试表结构==========

/*
 Navicat Premium Data Transfer

 Source Server         : 10.1.3.211本地
 Source Server Type    : MySQL
 Source Server Version : 50160
 Source Host           : 10.1.3.211
 Source Database       : test

 Target Server Type    : MySQL
 Target Server Version : 50160
 File Encoding         : utf-8

 Date: 08/24/2016 16:32:09 PM
*/

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `tst`
-- ----------------------------
DROP TABLE IF EXISTS `tst`;
CREATE TABLE `tst` (
  `test` varchar(255) DEFAULT NULL,
  `num` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `tst`
-- ----------------------------
BEGIN;
INSERT INTO `tst` VALUES ('a', '1'), ('a', '2'), ('a', '3'), ('a', '4'), ('b', '1'), ('b', '2'), ('b', '3'), ('b', '4');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__DEBUG__

来杯可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值