我有一列名为vs_tblRentals的列,其中包含以下列:
@CC_N
还有名为vs_tblBoxes的列,其中包含以下列
RENTALID CUSTOMERID BOXID RENTALDATE RETURNDATE
我试图创建一个查询,以检索vs_tblBoxes的BoxID列中的每个值出现在vs_tblRentals的BoxID列中的次数,从本质上告诉我每个盒子被租用了多少次。我可以通过以下命令执行此操作:
BOXID MOVIEID MEDIUMTYPECODE DATEBOXRECEIVED
但是,我也想在不属于该组的RentalCount旁边显示信息-理想情况下,我的输出应如下所示:
SELECT COUNT(vs_tblRentals.BoxID) AS RentalCount
FROM vs_tblRentals
LEFT JOIN vs_tblBoxes B ON vs_tblRentals.BoxID = B.BoxID
GROUP BY vs_tblRentals.BoxID;
我还想在vs_tblRentals中显示已租用超过5次的Boxs的所有记录。
这在Oracle 12c中应该如何完成?
编辑:
以下代码成功获取每个BoxID的租赁计数:
BoxID MovieID MediumTypeCode RentalCount
并输出以下内容:
SELECT COUNT(vs_tblRentals.BoxID) AS RentalCount, vs_tblRentals.BoxID
FROM vs_tblRentals
LEFT JOIN vs_tblBoxes B ON vs_tblRentals.BoxID = B.BoxID
GROUP BY vs_tblRentals.BoxID;
但是我无法同时显示有关BoxID的其他信息。
从vs_tblBoxes中采样数据:
RENTALCOUNT BOXID
1 337
1 691
1 43
4 321
4 123
4 665
4 674
vs_tblRentals中的样本数据
BOXID MOVIEID MEDIUMTYPECODE DATEBOXRECEIVED
257 702 BD 22-Nov-1953
258 708 VHS 16-Jul-1988
259 708 DVD 16-Jul-1988
答案 0 :(得分:0)
您可能想要以相反的顺序连接表(使vs_tblRentals中的条目为可选,而不是相反),将额外的列添加到select并GROUP BY
。
SELECT B.BoxID, B.MovieID, B.DateBoxReceived, COUNT(R.BoxID) AS RentalCount
FROM vs_tblBoxes B
LEFT JOIN vs_tblRentals R
ON R.BoxID = B.BoxID
GROUP BY B.BoxID, B.MovieID, B.DateBoxReceived;
在Oracle上使用GROUP BY
(例如,与MySQL相反)要求您更全面地指定查询,并在要提取或使用聚合函数(例如{{1} }或MAX
)
两者都不做会导致错误。
答案 1 :(得分:0)
不是使用左联接,而是使用右外部联接。
select b.boxId, count(*) as RentalCount from
vs_tblRentals r right outer join vs_tblBoxes b
on b.boxId = r.boxId group by b.boxId;