与组平均分配行

时间:2018-09-04 05:59:40

标签: mysql

假设我有一个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; 

Fiddle is here

此查询的结果仅提供7行,因为此查询从1至2之间的每个组(项目库)中选择行。仍然需要提取3行,我如何通过将其分布在可用的项目库中来提取其余3行?可用的项目库是指在提取前7个项目后排除拉出的项目并在剩余的库中重新分配。

0 个答案:

没有答案