mysql 分组后 每组随机取一条记录 求sql语句
【例如】问个sql 一个表里有四中类别的数据 ,常规, 运动,中药,养生, 我怎么一个sql从这四种数据中随机各取出一条 ,总共去4条。
目前,通过查询各种文章帖子,能写出的sql就是下面的这种,不考虑性能,但能满足功能,如果数据量特别大的话,
需要优化,性能更高的sql,一时间想不起来什么更好的sql,请看到这个帖子的各位多多指点。
1 (select * from (select * from demo1 where username = '优秀') a order by rand() limit 1) 2 union all 3 (select * from (select * from demo1 where username = '良好') a order by rand() limit 1) 4 union all 5 (select * from (select * from demo1 where username = '中等') a order by rand() limit 1) 6 union all 7 (select * from (select * from demo1 where username = '中下') a order by rand() limit 1);
1 /* 2 Navicat Premium Data Transfer 3 4 Source Server : LocalConnect 5 Source Server Type : MySQL 6 Source Server Version : 50730 7 Source Host : localhost:3306 8 Source Schema : demo 9 10 Target Server Type : MySQL 11 Target Server Version : 50730 12 File Encoding : 65001 13 14 Date: 26/05/2020 14:54:45 15 */ 16 17 SET NAMES utf8mb4; 18 SET FOREIGN_KEY_CHECKS = 0; 19 20 -- ---------------------------- 21 -- Table structure for demo1 22 -- ---------------------------- 23 DROP TABLE IF EXISTS `demo1`; 24 CREATE TABLE `demo1` ( 25 `id` int(11) NOT NULL AUTO_INCREMENT, 26 `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL, 27 `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL, 28 PRIMARY KEY (`id`) USING BTREE 29 ) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic; 30 31 -- ---------------------------- 32 -- Records of demo1 33 -- ---------------------------- 34 INSERT INTO `demo1` VALUES (1, '优秀', '100'); 35 INSERT INTO `demo1` VALUES (2, '良好', '95'); 36 INSERT INTO `demo1` VALUES (3, '中等', '82'); 37 INSERT INTO `demo1` VALUES (4, '良好', '95'); 38 INSERT INTO `demo1` VALUES (5, '中等', '82'); 39 INSERT INTO `demo1` VALUES (6, '良好', '82'); 40 INSERT INTO `demo1` VALUES (7, '优秀', '100'); 41 INSERT INTO `demo1` VALUES (8, '良好', '95'); 42 INSERT INTO `demo1` VALUES (9, '中等', '82'); 43 INSERT INTO `demo1` VALUES (10, '良好', '93'); 44 INSERT INTO `demo1` VALUES (11, '优秀', '100'); 45 INSERT INTO `demo1` VALUES (12, '良好', '93'); 46 INSERT INTO `demo1` VALUES (13, '优秀', '100'); 47 INSERT INTO `demo1` VALUES (14, '中等', '83'); 48 INSERT INTO `demo1` VALUES (15, '优秀', '100'); 49 INSERT INTO `demo1` VALUES (16, '良好', '96'); 50 INSERT INTO `demo1` VALUES (17, '中等', '93'); 51 INSERT INTO `demo1` VALUES (18, '良好', '92'); 52 INSERT INTO `demo1` VALUES (19, '中等', '85'); 53 INSERT INTO `demo1` VALUES (20, '优秀', '100'); 54 INSERT INTO `demo1` VALUES (21, '中等', '83'); 55 INSERT INTO `demo1` VALUES (22, '良好', '95'); 56 INSERT INTO `demo1` VALUES (23, '中等', '83'); 57 INSERT INTO `demo1` VALUES (24, '优秀', '100'); 58 INSERT INTO `demo1` VALUES (25, '良好', '96'); 59 INSERT INTO `demo1` VALUES (26, '中等', '86'); 60 INSERT INTO `demo1` VALUES (27, '优秀', '100'); 61 INSERT INTO `demo1` VALUES (28, '中等', '84'); 62 INSERT INTO `demo1` VALUES (29, '优秀', '100'); 63 INSERT INTO `demo1` VALUES (30, '中等', '86'); 64 INSERT INTO `demo1` VALUES (31, '中下', '76'); 65 INSERT INTO `demo1` VALUES (32, '中下', '75'); 66 INSERT INTO `demo1` VALUES (33, '中下', '78'); 67 68 SET FOREIGN_KEY_CHECKS = 1;