我正在尝试学习oracle sql的一些新技能,所以我在网上搜索一些例子。我找到了这个,有6个问题。我制作了所有表格和所有连接。我知道如何解决5个问题但是,最后一个对我来说似乎太难了。
我不知道如何从表格中显示我们获得最多的课程。我们实际上必须检查哪个preson访问了哪个课程,哪个人支付了哪个账单,以及该账单的价格类型(正常的学生)。
如果你们能帮助我,我真的很高兴。非常感谢!
这是我的E-R模型的打印屏幕和我的oracle sql的代码:
http://imgur.com/oM5IbTL,
http://pastebin.com/c1CqF3K8
如果你对英语不好或其他任何事情都不了解,请随意提问。如果我们能解决这个问题,我真的很高兴!
答案 0 :(得分:0)
您需要类似此查询的内容。我用访客的年龄检查账单类型,因为从你的设计来看,这是不可能的。在bill.fk_student列中,您存储了一些奇怪的内容,但没有提供有价值的信息, 还不清楚表格账单如何与其他表格连接。无论如何,这里有一些示例如何构建多个连接并使用数据进行操作:
ng-if
输出:
with data as (
select c.id id, c.name, l.id lid, fk_visitor vid, p.price
from course c
join lecture l on l.fk_course = c.id
join visiting vg on vg.fk_lecture = l.id
join visitor vr on vr.id = vg.fk_visitor
join price p on p.fk_course = c.id
and price_type = case when vr.age < 25 then 'student' else 'normal' end )
select id, name, sum(price) income
from data
group by id, name
order by income desc
要获得最有利可图的课程,只需使用 ID NAME INCOME
---------- -------------------- ----------
1 Programming 1170
6 Acting 500
2 Mathematic 440
4 Diving 310
5 Driving 200
3 Swimming 200
从此输出获取第一行,也可以使用函数rownum
或row_number()
获得解决方案。