我有以下要求。
如何根据不同条目的总数/数量之比选择相等的存储桶(或几乎相等)。 示例:如果表中的数据是
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)个条目,因此仅返回可用的条目 有人可以帮忙吗?
答案 0 :(得分:1)
这是一个“老派”解决方案...
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 |
+----+---+