mysql輸出九九乘法表 SQL 列印九九乘法表

2021-10-20 23:32:31 字數 3249 閱讀 5608

今天是週日,給大家看點輕鬆的——用 sql 列印九九乘法表。

九九乘法表的 sql 我曾發布到其它內容平台,現在把 sql 拷過來,稍微加一些說明。

下圖是我從網上找到乙個九九乘法表,本文要實現的也是這樣的效果。

圖1 九九乘法表

列印九九乘法表需要經過下面這幾個步驟:

構建一張 1 到 9 的數字表;

生成所有乘法算式的組合;

做行轉列處理,格式化輸出。

1 構建 1-9 的數字表

如果我們有數字輔助表(有專門的字段儲存從0/1起始的自然數列),那可以直接使用該錶。如果沒有數字輔助表,找到任意一張儲存大於 9 條記錄數的表,借助於視窗函式或者使用者變數生成 1-9 的自然數列。

視窗函式生成 1-9 的自然數列:

select

row_number() over() as num

from

emplimit 9

使用使用者變數生成 1-9 的自然數列。

select

@rn := @rn + 1 as num

from

emp,(select @rn:=0) a

limit 9

由於我的 emp 表的記錄數大於 9,所以用上面兩種方式構建自然數列沒有問題。

如果表的行數一直在變動,也可以使用遞迴的方式生成自然數列:

with recursive t(num) as (

select 1 as num

union all

select num + 1 from t where num < 9

select * from t

不想太折騰的話,那就自己造資料吧,就像這樣:

with t as

(select 1 as num

union select 2

union select 3

union select 4

union select 5

union select 6

union select 7

union select 8

union select 9)

select * from t

這一步輸出的結果就是 1-9 的自然數列。

2 生成所有乘法算式的組合

將 t 表做自關聯就可以生成所有乘法算式的組合。

觀察圖1可知,乘法表由九行九列的乘法算式組成,只是第一行只有一列有算式,第二行有兩列算式,......,第九行有九列算式。每個算式的第乙個數表示所在的列,第二個數表示所在的行。因此,當 t 表自關聯時可將第乙個表的字段的值作為算式的第乙個數(欄位名為 f),將第二個表的字段的值作為算式的第二個數(欄位名為 s)。

t2 as

(select

a.num as f,

b.num as s,

concat(

a.num,

' x ',

b.num,

a.num * b.num

) as r

from

t as a

inner join t as b

on a.num <= b.num)

select

from

t2這步輸出的結果如下(部分):

f s r

1 1 1 x 1 = 1

2 2 2 x 2 = 4

1 2 1 x 2 = 2

3 3 3 x 3 = 9

2 3 2 x 3 = 6

1 3 1 x 3 = 3

4 4 4 x 4 = 16

3 4 3 x 4 = 12

2 4 2 x 4 = 8

1 4 1 x 4 = 4

5 5 5 x 5 = 25

4 5 4 x 5 = 20

3 5 3 x 5 = 15

2 5 2 x 5 = 10

1 5 1 x 5 = 5

3 做行轉列處理,格式化輸出

將步驟 2 中的結果集,字段 f 作為轉列的依據,字段 s 作為分組的依據。

select

max(if(f = 1, r, '')) as v1,

max(if(f = 2, r, '')) as v2,

max(if(f = 3, r, '')) as v3,

max(if(f = 4, r, '')) as v4,

max(if(f = 5, r, '')) as v5,

max(if(f = 6, r, '')) as v6,

max(if(f = 7, r, '')) as v7,

max(if(f = 8, r, '')) as v8,

max(if(f = 9, r, '')) as v9

from

t2group by s

這一步將輸出最終的結果。

完整的 sql 如下:

with recursive t (num) as

(select

1 as num

union

allselect

num + 1

from

twhere num < 9),

t2 as

(select

a.num as f,

b.num as s,

concat(

a.num,

' x ',

b.num,

a.num * b.num

) as r

from

t as a

inner join t as b

on a.num <= b.num)

select

max(if(f = 1, r, '')) as v1,

max(if(f = 2, r, '')) as v2,

max(if(f = 3, r, '')) as v3,

max(if(f = 4, r, '')) as v4,

max(if(f = 5, r, '')) as v5,

max(if(f = 6, r, '')) as v6,

max(if(f = 7, r, '')) as v7,

max(if(f = 8, r, '')) as v8,

max(if(f = 9, r, '')) as v9

from

t2group by s

九九乘法表

題目描述 完成乙個99乘法表,如下圖所示,用js生成,不能有table 本來想用table實現,但是table貌似只能實現階梯效果,因為table並不能進行錯位。99乘法很簡單兩個for迴圈就可以實現,主要是布局,我搞了很久。布局解析 1.乙個div包裹住全部 2.div中有九個div分別代表每一行...

九九乘法表

小時候學過的九九乘法表也許將會扎根於我們一生的記憶,現在讓我們重溫那些溫暖的記憶,請程式設計輸出九九乘法表.現在要求你輸出它的格式與平常的 不同啊 是那種反過來的三角形啦,具體如下圖 每兩個式子之前用乙個空格 隔開。輸入 第一有乙個整數n,表示有n組資料 n 10 接下來由n行,每行只有乙個整數m ...

九九乘法表

九九乘法表 簡易版 public classameir yang7 publicstatic void main string args intline 1 for inti 1 i line i system.out.print i line i line t system.out.println...