繁体   English   中英

合并两个 SQL 选择结果

[英]merge TWO results of SQL select

同一个mysql表中有两种类型的数据。

某些数据的特定列设置为“1”,另一个数据的列设置为“0”(同一列中的 0 和 1)

我怎样才能像下面那样一次性混合它们? (使用选择查询) - 每六个“0”行后跟一个“1”行。

我的数据

好吧,您可以使用窗口函数进行排序 - 如果您运行的是 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

逻辑是对具有相同值的记录进行排名; 然后可以使用简单的算法来处理交替(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

我会这样表述:

order by ( floor(row_number() over (partition by column order by data) - 1) /
                 (case when column = 1 then 1 else 5 end)
                )
         ),
         column,
         data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM