ATao365

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;

 

分类:

技术点:

相关文章: