mysql 分组 前几条_mysql分组取前几条

DROP TABLE IF EXISTS `info`;

CREATE TABLE `info` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

`views` int(255) DEFAULT NULL,

`info_type_id` int(11) DEFAULT NULL,

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------

-- Records of info

-- ----------------------------

INSERT INTO `info` VALUES (1, '中日海军演习', 10, 4);

INSERT INTO `info` VALUES (2, '美俄军事竞赛', 22, 4);

INSERT INTO `info` VALUES (3, '流浪地球电影大火', 188, 1);

INSERT INTO `info` VALUES (4, '葛优瘫', 99, 2);

INSERT INTO `info` VALUES (5, '周杰伦出轨了', 877, 2);

INSERT INTO `info` VALUES (6, '蔡依林西安演唱会', 86, 1);

INSERT INTO `info` VALUES (7, '中纪委调盐', 67, 3);

INSERT INTO `info` VALUES (8, '人民大会堂', 109, 3);

INSERT INTO `info` VALUES (9, '重庆称为网红城市', 202, 1);

INSERT INTO `info` VALUES (10, '胡歌结婚了', 300, 2);

INSERT INTO `info` VALUES (11, 'ipone15马上上市', 678, 2);

INSERT INTO `info` VALUES (12, '中国探月成功', 54, 4);

INSERT INTO `info` VALUES (13, '钓鱼岛对峙', 67, 4);

DROP TABLE IF EXISTS `info_type`;

CREATE TABLE `info_type` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------

-- Records of info_type

-- ----------------------------

INSERT INTO `info_type` VALUES (1, '娱乐');

INSERT INTO `info_type` VALUES (2, '八卦');

INSERT INTO `info_type` VALUES (3, '政治');

INSERT INTO `info_type` VALUES (4, '军事');

法一:

SELECT

t.*

FROM

(

SELECT

t1.*, (

SELECT

count(*) + 1

FROM

info t2

WHERE

t2.info_type_id = t1.info_type_id

AND t2.views > t1.views

) top

FROM

info t1

) t

WHERE

top <= 3

ORDER BY

t.info_type_id,

top

93e8838b4d194972b02c3f5deb568ffb.jpg

法二:

SELECT

t1.*

FROM

info t1

WHERE

(

SELECT

count(*) + 1

FROM

info t2

WHERE

t2.info_type_id = t1.info_type_id

AND t2.views > t1.views

) <= 3

ORDER BY

t1.info_type_id

381674dfa92e4249905aae1212b050f9.jpg

法三:

SELECT

t1.*

FROM

info t1

WHERE

EXISTS (

SELECT

count(*) + 1

FROM

info t2

WHERE

t2.info_type_id = t1.info_type_id

AND t2.views > t1.views

HAVING

(count(*) + 1) <= 3

)

ORDER BY

t1.info_type_id

70bd84664c694de189b1ad328dc7592f.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值