我正在编写一个查询,将我从子查询收到的计数乘以费用金额,但我不知道该怎么做。任何帮助/建议? Oracle查询是:
select courseid,coursename,fees*tmp
from course c join registration r on
r.courseid=c.courseid
and tmp IN (select count(*)
from course c join registration r on
r.courseid=c.courseid group by coursename);
我试图像变量tmp一样使用,但我认为它不适用于oracle查询。有没有其他方法可以这样做?
答案 0 :(得分:1)
您不能这样做,因为您只能从FROM和WHERE之间出现的表中选择数据。 IN运算符是一种快速的方法来节省必须编写一堆OR语句,它不能在外部查询中建立变量。
取而代之的是:
select courseid,coursename,fees * COUNT(r.courseID) OVER(PARTITION BY c.coursename)
from course c join registration r on
r.courseid=c.courseid
编辑/更新:您注意到此查询产生了太多行,您只想查看不同的课程名称。在这种情况下,最好只使用注册表来计算课程中的人数,然后乘以费用:
SELECT
c.courseid, c.coursename, c.fees * COALESCE(r.numberOfstudents, 0) as courseWorth
FROM
course c
LEFT OUTER JOIN
(select courseid, COUNT(*) as numberofstudents FROM registration GROUP BY courseid) r
ON c.courseID = r.courseid
答案 1 :(得分:0)
你可以使用像Caius这样的窗口函数,或者你可以使用这样的连接:
select courseid,coursename, fees * COALESCE(sub.cnt,0)
from course c
join registration r on r.courseid=c.courseid
left join (
select coursename, count(*) as cnt
from course c2
join registration r2 on r2.courseid=c2.courseid
group by coursename
) as sub;
注意:我没有声明您的联接是正确的 - 我的基础是您的示例,而不是您对数据模型的任何了解。