显示我们获得最多收益的课程

时间:2015-04-25 12:20:31

标签: sql oracle

我正在尝试学习oracle sql的一些新技能,所以我在网上搜索一些例子。我找到了这个,有6个问题。我制作了所有表格和所有连接。我知道如何解决5个问题但是,最后一个对我来说似乎太难了。

我不知道如何从表格中显示我们获得最多的课程。我们实际上必须检查哪个preson访问了哪个课程,哪个人支付了哪个账单,以及该账单的价格类型(正常的学生)。

如果你们能帮助我,我真的很高兴。

非常感谢!

这是我的E-R模型的打印屏幕和我的oracle sql的代码:

http://imgur.com/oM5IbTL
http://pastebin.com/c1CqF3K8

如果你对英语不好或其他任何事情都不了解,请随意提问。如果我们能解决这个问题,我真的很高兴!

1 个答案:

答案 0 :(得分:0)

您需要类似此查询的内容。我用访客的年龄检查账单类型,因为从你的设计来看,这是不可能的。在bill.fk_student列中,您存储了一些奇怪的内容,但没有提供有价值的信息, 还不清楚表格账单如何与其他表格连接。无论如何,这里有一些示例如何构建多个连接并使用数据进行操作:

SQLFiddle

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 从此输出获取第一行,也可以使用函数rownumrow_number()获得解决方案。