select *,'example' AS species
from top_half
inner join bottom_half
on top_half.id = bottom_half.id
order by species(
CASE
WHEN heads > arms THEN species.example = 'beast'
when tails > legs then species.example = 'beast'
else species.example = 'weirdo'
END
);
我收到以下错误:
SQL查询出错:
PG :: UndefinedTable:错误:缺少表的FROM子句条目 “物种”第2行:当头部>武器那么species.example ='野兽' SQL查询出错:
PG :: UndefinedTable:错误:缺少表的FROM子句条目 “物种”第2行:当头部> arm THEN species.example ='beast'
如何解决这个问题?
codewars.com/kata/sql-basics-monsters-using-case/train/sql
我正在尝试解决上面链接中的问题
说明
您可以访问名为top_half和bottom_half的两个表 如下:
top_half架构
- id
- 负责人
- arms
bottom_half架构
- id
- leg
- tails
您必须返回一个格式如下的表格:
输出架构
- id
- 负责人
- leg
- arms
- tails
- 种
表格上的ID匹配 完整的怪物。对于头部,手臂,腿部和尾部,您需要画入 来自每个表的数据。
对于物种,如果怪物的头部多于武器和/或更多 尾巴比腿,它是'野兽',否则它是'WEIRDO'。这需要 在物种专栏中被捕获。
应返回所有行(10)。
测试需要使用CASE。按物种排序。
请使用纯SQL,只在Ruby中进行测试。
答案 0 :(得分:1)
对于物种,如果怪物的头部多于武器和/或更多 尾巴比腿,它是一个'野兽'否则它就是一个' WEIRDO'。这需要 在物种专栏中被捕获。
您需要将CASE ... WHEN移动到SELECT子句。:
select *,
CASE
WHEN heads > arms THEN 'beast'
when tails > legs then 'beast'
else 'weirdo'
END As Species
from top_half
inner join ....
.....
测试需要使用CASE。按物种排序。
使用此条款:
....
ORDER BY species
或者这个:
.......
ORDER BY
CASE
WHEN heads > arms THEN 'beast'
when tails > legs then 'beast'
else 'weirdo'
END
答案 1 :(得分:1)
合并:
SELECT *, CASE WHEN heads > arms OR tails > legs THEN text 'BEAST'
ELSE 'WEIRDO' END AS species
FORM top_half
JOIN bottom_half USING (id)
ORDER BY species;
答案 2 :(得分:0)
select t.id,t.heads, b.legs,t.arms,b.tails,
CASE
WHEN t.heads > t.arms THEN 'BEAST'
WHEN b.tails > b.legs THEN 'BEAST'
ELSE 'WEIRDO'
END as species
from top_half t
join bottom_half b
ON t.id = b.id
ORDER BY species