I categorized a table with the method introduced here to categorize my items to folders with a limit size of 100.
mixing_order id num_items cat order_in_cat cumulative_sum folder
1 1 4 1 1 4 1
2 2 33 1 2 37 1
3 3 74 2 1 74 2
4 4 41 1 3 41 3
5 5 24 1 4 65 3
6 6 44 2 2 44 4
7 7 16 1 5 57 4
8 8 55 1 6 55 5
9 9 11 1 7 66 5
10 10 37 1 8 37 6
Now, I want to go further and re-arrange the rows to better fit within folders. Consider that the records are of two categories (indicated by column cat
). We can make a better fit just by altering the order of mixing
. Then, we can produce the following table as each folder has a cumulative_sum
close to the folder size limit (i.e. 100 here). As you can see, the order in each category (order_in_cat
) has not been changed, only the order that the rows from different categories are mixed.
mixing_order id num_items cat order_in_cat cumulative_sum folder
1 1 4 1 1 4 1
2 2 33 1 2 37 1
3 4 41 1 3 78 1
4 3 74 2 1 74 2
5 5 24 1 4 98 2
6 7 16 1 5 16 3
7 8 55 1 6 67 3
8 9 11 1 7 78 3
9 6 44 2 2 44 4
10 10 37 1 8 81 4
In other words, the mixing_order
was random in order of INSERT
, but now we want to re-arrange the mixing_order
to best fit within folder.
Probably, we need a loop in which re-calculating SUM
to find the best match out of possible choices, but I have no idea how to conduct such loop in SQL
.
1
(all items in the same category) toN!
(all items in their own category). If you want to find the absolute best fit, this will be very slow in general.