Существует ли путь в SQL (MySQL), чтобы сделать “круговой” ORDER BY на конкретном поле?

Попробуйте использовать 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
                    }
                }
            }
        }
    }
}

.

6
задан Machavity 22 August 2017 в 14:34
поделиться

3 ответа

То, что можно сделать, создают временный столбец, в котором Вы создаете наборы, чтобы дать Вам что-то вроде этого:

+-------+------+-----+
| 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
5
ответ дан 8 December 2019 в 16:10
поделиться

Я попробовал бы что-то как:

SET @counter = 0;
SELECT (@counter:=@counter+1)%3 as rr, grp, name FROM table ORDER by rr, grp 
7
ответ дан 8 December 2019 в 16:10
поделиться

Можно использовать переменные 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 |
+------+------+--------------+
3
ответ дан 8 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: