使用 SQL 输出 5 x 5 的矩阵,矩阵的值由 1~25 填充,实现的效果如下表所示。
A | B | C | D | E |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
经观察可知,
因此,我们可以将 1~25 的数除 5 后再向上取整得到的值作为分组的依据;同时,1~25 对 5 求余结果为 1 的放到 A 列,结果为 2 的放到 B 列,结果为 3 对应的是 C 列,结果为 4 对应的是 D 列,E 列则放结果为 0 的数。
第一步,生成 1~25 的数。
可借助数字表或者使用递归达到此目的,本文使用的是递归的方式。
WITH recursive t_seq (num) AS
(SELECT
1 AS num
UNION
ALL
SELECT
num + 1 AS num
FROM
t_seq
WHERE num < 25)
SELECT * FROM t_seq
第二步,计算出每个数字对应的组号,依据求余的结果做行转列处理。
x0 AS
(SELECT
num,
CEIL(num / 5) AS group_no
FROM
t_seq),
x1 AS
(SELECT
group_no AS row_no,
MAX(IF(num % 5 = 1, num, NULL)) AS A,
MAX(IF(num % 5 = 2, num, NULL)) AS B,
MAX(IF(num % 5 = 3, num, NULL)) AS C,
MAX(IF(num % 5 = 4, num, NULL)) AS D,
MAX(IF(num % 5 = 0, num, NULL)) AS E
FROM
x0
GROUP BY group_no)
SELECT A ,B ,C ,D ,E FROM x1
最终输出>>>
A B C D E
------ ------ ------ ------ --------
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25