暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL 打印矩阵 (一)

SQL实现 2021-04-29
407

使用 SQL 输出 5 x 5 的矩阵,矩阵的值由 1~25 填充,实现的效果如下表所示。

ABCDE
12345
678910
1112131415
1617181920
2122232425

经观察可知,

  • 排在同一行的数是因为它们本身除 5 后再向上取整得到的是同一个值;
  • 排在同一列的数是因为它们本身对 5 求余的结果一致;
  • 同一行的数从左到右是递增;同样,同一列的数从上到下也是递增的。

因此,我们可以将 1~25 的数除 5 后再向上取整得到的值作为分组的依据;同时,1~25 对 5 求余结果为 1 的放到 A 列,结果为 2 的放到 B 列,结果为 3 对应的是 C 列,结果为 4  对应的是 D 列,E 列则放结果为 0 的数。

第一步,生成 1~25 的数。

可借助数字表或者使用递归达到此目的,本文使用的是递归的方式。

WITH recursive t_seq (numAS 
(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 / 5AS group_no 
FROM
  t_seq),
x1 AS 
(SELECT 
  group_no AS row_no,
  MAX(IF(num % 5 = 1numNULL)) AS A,
  MAX(IF(num % 5 = 2numNULL)) AS B,
  MAX(IF(num % 5 = 3numNULL)) AS C,
  MAX(IF(num % 5 = 4numNULL)) AS D,
  MAX(IF(num % 5 = 0numNULL)) 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


文章转载自SQL实现,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论