объединить два результата SQL выберите - PullRequest
0 голосов
/ 31 марта 2020

В одной и той же таблице mysql есть два типа данных.

Для некоторых столбцов спецификаций c установлено значение «1», а для других столбцов данных установлено значение «0» (0 и 1 в той же колонке)

Как я могу смешать их сразу, как показано ниже? (с запросом выбора) - за каждой шестой строкой «0» следует одна строка «1».

my data

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я бы сказал так:

order by ( floor(row_number() over (partition by column order by data) - 1) /
                 (case when column = 1 then 1 else 5 end)
                )
         ),
         column,
         data
0 голосов
/ 31 марта 2020

Ну, вы можете использовать оконные функции для сортировки - если вы выполняете MySQL 8.0:

select code, val
from mytable
order by
    row_number() over(partition by val order by code) 
        * (case when val = 0 then 1 else 5 end),
    val,
    code

Лог c предназначен для ранжирования записей, имеющих одинаковое значение; тогда для обработки чередования можно использовать простую арифметику (5 0 с, затем 1 1).

Демонстрация DB Fiddle :

code   | val
:----- | --:
data1  |   0
data10 |   0
data11 |   0
data12 |   0
data13 |   0
data2  |   1
data14 |   0
data15 |   0
data3  |   0
data4  |   0
data5  |   0
data8  |   1
data6  |   0
data7  |   0
data9  |   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...