【SQL 解决鸡兔同笼问题】

鸡兔同笼

一、问题简述

笼子里有鸡和兔两种动物,这些小动物,有150条腿,60个头,问:有几只鸡?几只兔?
全是鸡:120条腿;
全是兔:240条腿;
就简单的按实际腿数,不考虑任何抬脚、躺着的之类的情况

二、思路

这题思路是穷举法,所以先用Excel进行分析,因为有60个头,可先列出鸡的数列60,然后兔的头就是60-鸡头数,然后腿数按正常条件和为 鸡头数 乘以 2 加上 剩下的兔头数 乘以 4,结果集就直接通过【 鸡头数 乘以 2 加上 剩下的兔头数 乘以 4】 等于题目给的 150 条腿进行条件判断,为TRUE 则是鸡兔个数;【这里涉及Excel的基本表操作】
在这里插入图片描述
对于基本的数学思路有了,这时候要转化为SQL语句;

三、前置知识

1、 with 语句:
Oracle 数据库中,使用 with 语句可以实现子查询,提高语句执行的效率;
当查询中多次用到某一部分时,可以用 Oracle with 语句创建一个公共临时表。因为子查询在内存临时表中,避免了重复解析,所以执行效率会提高不少。临时表在一次查询结束自动清除。
2、connect by:
用到Oracle 的 connect by的一个特殊用法,用来产生指定行的一个虚拟表。

四、使用工具

Oracle
PL/ SQL Developer

五、SQL代码——基于Oracle

with t as 
     ( 
       select 
         rownum as ji, 
         60 - rownum as tu, 
         rownum * 2 + ( 60 - rownum) * 4 as allLeg 
       from dual connect by rownum <= 60 
     )
select 
    t.ji ,
    t.tu ,
    t.allLeg 
from t
where 
     t.allLeg = 150
;

六、附上结果截图

在这里插入图片描述
没有加上 where 限制条件之前,和 Excel 思路分析 一样
在这里插入图片描述

七、小结

接触这个题目是即将接触ETL的兴趣题,还蛮有意思的,鸡兔同笼问题条件可以自己约束一些条件,头多少个,然后根据头数随便定一个鸡和兔总腿数,只要腿总数符合他们最大的腿数和即可;

对于这题的思路和解决问题的SQL肯定有不一样的,只是一些小想法,而且代码也不一定写的规范易懂,如果有道友看到这篇文章有其他的思路也可以一起讨论哦;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值