sql如何让计算出来的结果百分数显示_图解面试题:如何交换数据?

442ce8323ec37739d228800b11d687be.png

【题目】

小明是一所学校的老师,她有一张 ‘学生表’,平时用来存放座位号和学生的信息。其中,座位号是连续递增的。总的座位数是偶数。

8db902c463c6ae678c2a2b0e55bf2cc9.png

现在,小明想改变相邻俩学生的座位。你能不能帮她写一个sql查来输出想要的结果呢?

示例查询结果如下:

c14af86e486cfed3f01d12b7fafa4683.png

【解题思路】

第一步:理清换座位的逻辑

查询目的是改变相邻学生的座位号。为了理清逻辑,在原表中插入一列叫做‘奇偶数’,对应表示“座位号”的值是“奇数”还是“偶数”。

42c23ea35f7aa0cdac974b05702730f5.png

然后比较原始表里的“座位号”和交换结果里的“座位号”(对比分析方法),可以发现下图的规律。

0385058c2875e75bfded04814ab380fe.png

1)如果原来座位号是奇数的学生,换座位后,这名学生的座位号变为“座位号+1”

2)如果原来座位号是偶数的学生,换座位后,这名学生的座位号变为“座位号-1”

第二步:如何判断座位号是奇数,还是偶数

sql求余函数:mod(n,m) ,返回n除以m的余数。比如mod(8,2) 的结果是0。

如果n除以2的余数是0,说明n是偶数,否则是奇数。

转换为判断奇数,偶数的sql就是:

dc99be961f04ecbb31be0a3ccf3af0fd.png

把前面的逻辑加入上面这个sql里就是:

1)如果原来座位号是奇数的学生,换座位后,这名学生的座位号变为“座位号+1”

2)如果原来座位号是偶数的学生,换座位后,这名学生的座位号变为“座位号-1”

cd5d91c0f87023950e206866c9a500e1.png

第二步:对查询结果排序

因为查询结果里座位号是升序排列的,所以最后还要排序(order by 座位号 asc)。

加入select子句,最终sql如下:

df08e30305748d0a8e0c3448406f1f83.png

【本题考点】

1.逻辑思维能力,如何使用对比分析方法发现规律

2.条件判断语句case

3.如何判断奇数和偶数:mod函数

【举一反三】

原始座次表 ‘seat’如下,现需要更换相邻位置学生的座次。

注:该座次表‘seat’共有5名学生,第5个 奇偶性为奇数的学生座次为不变

339f86b3add5602fe9c06d3d928c0f96.png

查询逻辑和前面一样,但是座位总数是奇数,所以:如果最后一个座位号也是奇数,那么他没有可以交换的座位了,所以最后一个座位号的学生不变。

最后一个座位号,等于表里有多少行,可以用count(*) 计算出来

6132515e311ef6bd6563c287e8379c84.png

最后一个座位号作为条件判断使用时,可以使用子查询,以便调用。最终sql如下。

098846567aed88e1a022648eb07551ab.png

来着《猴子 从零学会sql》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值