oracle递归查询已知农场里只有鸡和牛,一个人看到8条腿,3个头,请问有多少头牛和鸡使用sql语句写出
时间: 2024-10-18 08:13:14 浏览: 26
这是一个典型的递归查询的问题,通常可以用WITH RECURSIVE子句来解决。假设有一个名为`animals`的表,有两个字段:`type`表示动物类型('chicken' or 'cow'),`legs`表示每只动物的腿数(2 for chicken,4 for cow)。我们可以这样编写SQL:
```sql
WITH RECURSIVE animal_count (total_legs, total_heads, current_type) AS (
-- 初始条件:如果有0条腿和0个头,那一定是3个头的牛(因为每个牛有4条腿)
SELECT 0, 3, 'cow'
UNION ALL
-- 如果当前类型不是最后一种,我们递归添加下一条同类型的动物
UNION ALL
SELECT a.total_legs + 2, a.total_heads, a.current_type -- 鸡增加两条腿和0个头
FROM animal_count a
WHERE a.current_type = 'chicken'
-- 否则,如果当前类型是最后一种,我们需要计算剩余的头数(因为已经考虑了所有鸡)
UNION ALL
SELECT a.total_legs + 0, a.total_heads - 1, a.current_type -- 牛不需要加腿,减少一个头
FROM animal_count a
WHERE a.current_type = 'cow'
)
SELECT
CASE
WHEN total_heads > 0 THEN '牛' ELSE '鸡' END as type,
total_heads
FROM animal_count
WHERE total_legs = 8;
```
这个查询会返回牛和鸡各有多少头。由于结果中只有鸡和牛,所以如果有头的数量少于3,那就是不可能的情况,实际场景中可能存在数据错误。
阅读全文