我需要写一个查询,其中我需要首先数一数剧院中眼镜的门票,然后计算每家剧院销售的平均票数,并将其舍入小数点后两位,这些值必须按照售出的票数进行排序。原则上,我想找出每家剧院平均售出的票数。对于这个查询,我必须使用AVG()和循环()。我尝试了很多不同的选择,但我有不同的错误。当我试图运行此程序时,出现了以下错误:
SELECT
t.id_theater
, s.id_spectacle
, ROUND((AVG(COUNT(tickets.id_ticket))), 2) average_tickets_theatre
FROM
tickets tick
, theater t
, spectacles s
WHERE
tick.id_spectacle = s.id_spectacle
AND t.id_theater = s.id_theater
GROUP BY
t.id_theater
, s.id_spectacle
ORDER BY
average_tickets_theatre我试图添加HAVING子句,但出现了另一个错误:
SQL Error: ORA-00933: SQL command not properly ended我确信问题在于我试图使用COUNT ()和AVG(),但我真的不知道在这一点上做什么,并希望得到任何帮助。
发布于 2021-01-06 00:46:04
当前版本给出了一个错误,因为您试图获得一个聚合函数(平均值)而不是另一个聚合函数(计数);它与round无关。据我所知,您希望输出id_theater、id_spectacle、每个剧院和眼镜的票数,以及每个剧院的平均票数。有一种方法(从性能角度看很可能不是最快的)是
with t1 as
(SELECT
t.id_theater
, s.id_spectacle
, COUNT(tick.id_ticket) as num_tickets
FROM
tickets tick
, theater t
, spectacles s
WHERE
tick.id_spectacle = s.id_spectacle
AND t.id_theater = s.id_theater
GROUP BY
t.id_theater
, s.id_spectacle
)
select id_theater,id_spectacle , num_tickets, ROUND(avg(num_tickets) over (partition by id_theater),2) as avg_per_theater
from t1另外,我建议使用ANSI-92联接而不是ANSI-89语法,这样更容易读
https://dba.stackexchange.com/questions/282636
复制相似问题