如何编写MySQL查询从单列筛选奇偶数值并分两列返回结果
MySQL查询:将单列奇偶数值配对为两列返回
问题描述
从仅包含Numb列的表中筛选偶数与奇数,按顺序配对后以even(偶数)和odd(奇数)两列的格式返回,要求第n个偶数对应第n个奇数(如2对应1、4对应3等)。
解决方案
假设目标表名为numbers,可通过以下查询实现:
WITH even_nums AS ( SELECT Numb AS even, ROW_NUMBER() OVER (ORDER BY Numb) AS rn FROM numbers WHERE Numb % 2 = 0 ), odd_nums AS ( SELECT Numb AS odd, ROW_NUMBER() OVER (ORDER BY Numb) AS rn FROM numbers WHERE Numb % 2 = 1 ) SELECT even_nums.even, odd_nums.odd FROM even_nums JOIN odd_nums ON even_nums.rn = odd_nums.rn ORDER BY even_nums.even;
逻辑说明
- 拆分奇偶数据集:用两个CTE分别筛选出偶数和奇数,同时通过
ROW_NUMBER()函数为每个数据集按Numb升序生成行号rn,保证奇偶数值的顺序对应。 - 关联配对:通过行号
rn将两个数据集关联,实现偶数和奇数的一一配对,最后按偶数值升序排序得到结果。
示例验证
针对题目给出的输入表,执行上述查询后将得到如下结果:
+------+-----+ | even | odd | +------+-----+ | 2 | 1 | | 4 | 3 | | 6 | 5 | | 8 | 7 | | 10 | 9 | | 12 | 11 | +------+-----+
内容的提问来源于stack exchange,提问作者Rony_Beginner
相关产品推荐
相关产品推荐

