假设我有一个ITEMBANKITEMASSOCIATION
表,
ID FKITEMBANKID FKITEMID
1 1 100
2 2 101
3 2 102
4 2 103
5 2 104
6 3 105
7 3 106
8 4 107
9 4 108
10 4 109
11 4 110
12 4 111
我想选择10行,但是行必须均匀地分布在FKITEMBANKID
中。这意味着假设我要在4个项目库中选择10行,因此10/4从每个项目库中选择2个项目。我通过查询实现
SELECT ITEMBANKITEMASSOCIATION.*
FROM ITEMBANKITEMASSOCIATION INNER JOIN (
SELECT inIBA.FKITEMBANKID, GROUP_CONCAT(inIBA.FKITEMID) grouped_year
FROM ITEMBANKITEMASSOCIATION inIBA
GROUP BY inIBA.FKITEMBANKID) group_max
ON ITEMBANKITEMASSOCIATION.FKITEMBANKID = group_max.FKITEMBANKID
AND FIND_IN_SET(ITEMBANKITEMASSOCIATION.FKITEMID, grouped_year) between 1 and 2
ORDER BY
ITEMBANKITEMASSOCIATION.FKITEMBANKID DESC;
此查询的结果仅提供7行,因为此查询从1至2之间的每个组(项目库)中选择行。仍然需要提取3行,我如何通过将其分布在可用的项目库中来提取其余3行?可用的项目库是指在提取前7个项目后排除拉出的项目并在剩余的库中重新分配。