Попробуйте использовать Bucket sort
POST /sales/_search
{
"size": 0,
"aggs" : {
"sales_per_month" : {
"date_histogram" : {
"field" : "date",
"interval" : "month"
},
"aggs": {
"total_sales": {
"sum": {
"field": "price"
}
},
"sales_bucket_sort": {
"bucket_sort": {
"sort": [
{"total_sales": {"order": "desc"}}
],
"size": 3,
"from": 10
}
}
}
}
}
}
.
То, что можно сделать, создают временный столбец, в котором Вы создаете наборы, чтобы дать Вам что-то вроде этого:
+-------+------+-----+
| group | name | tmp |
+-------+------+-----+
| 1 | A | 1 |
| 1 | B | 2 |
| 1 | C | 3 |
| 2 | D | 1 |
| 2 | E | 2 |
| 2 | F | 3 |
| 3 | G | 1 |
| 3 | H | 2 |
| 3 | I | 3 |
+-------+------+-----+
Чтобы изучить, как создать наборы, взгляните на этот вопрос/ответ.
Затем это - простое
ORDER BY tmp, group, name
Я попробовал бы что-то как:
SET @counter = 0;
SELECT (@counter:=@counter+1)%3 as rr, grp, name FROM table ORDER by rr, grp
Можно использовать переменные MySQL, чтобы сделать это.
SELECT grp, name, @row:=@row+1 from table, (SELECT @row:=0) r ORDER BY (@row % 3);
+------+------+--------------+
| grp | name | @row:=@row+1 |
+------+------+--------------+
| 1 | A | 1 |
| 2 | D | 4 |
| 3 | G | 7 |
| 1 | B | 2 |
| 2 | E | 5 |
| 3 | H | 8 |
| 1 | C | 3 |
| 2 | F | 6 |
| 3 | I | 9 |
+------+------+--------------+