mysql查询,用于根据给定的总条目数限制的不同条目数选择相等的存储桶

67up9zun  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(274)

我有以下要求。
如何根据不同条目的总数/数量的比率选择相等(或几乎相等)的存储桶。示例:如果表中的数据是

10 u1 
11 u1
12 u2
13 u2
14 u2
15 u3
16 u3
17 u3
18 u3
19 u3
20 u4
21 u4
22 u4
23 u4
24 u4
25 u4
26 u4
27 u4
28 u4
29 u4

现在第二列中有4个不同的值,如果我想选择20行,结果应该是/,可能如下所示

10 u1 
11 u1
12 u2
13 u2
14 u2
15 u3
16 u3
17 u3
18 u3
19 u3
20 u4
21 u4
22 u4
23 u4
24 u4

u1和u2没有5(20/4)个条目,所以只能返回可用的条目,有人能帮忙吗?

yebdmbv4

yebdmbv41#

这里有一个“老派”的解决方案。。。

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,u INT NOT NULL
);

INSERT INTO my_table VALUES
(10,1),
(11,1),
(12,2),
(13,2),
(14,2),
(15,3),
(16,3),
(17,3),
(18,3),
(19,3),
(20,4),
(21,4),
(22,4),
(23,4),
(24,4),
(25,4),
(26,4),
(27,4),
(28,4),
(29,4);

SELECT id
     , u 
  FROM  
     ( SELECT x.*
            , COUNT(*) running 
         FROM my_table x 
         JOIN my_table y 
           ON y.u = x.u 
          AND y.id <= x.id 
        GROUP 
           BY x.id 
        ORDER 
           BY running
            , u 
        LIMIT 15
     ) a
 ORDER 
    BY id;
+----+---+
| id | u |
+----+---+
| 10 | 1 |
| 11 | 1 |
| 12 | 2 |
| 13 | 2 |
| 14 | 2 |
| 15 | 3 |
| 16 | 3 |
| 17 | 3 |
| 18 | 3 |
| 19 | 3 |
| 20 | 4 |
| 21 | 4 |
| 22 | 4 |
| 23 | 4 |
| 24 | 4 |
+----+---+

相关问题