前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 打印矩阵 (一)

SQL 打印矩阵 (一)

作者头像
白日梦想家
发布2020-11-10 10:12:07
5750
发布2020-11-10 10:12:07
举报
文章被收录于专栏:SQL实现

使用 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

经观察可知,

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

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

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

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

代码语言:javascript
复制
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

第二步,计算出每个数字对应的组号,依据求余的结果做行转列处理。

代码语言:javascript
复制
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

最终输出>>>

代码语言:javascript
复制
     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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SQL实现 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档