首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一个查询中使用COUNT ()和AVG()?

如何在同一个查询中使用COUNT ()和AVG()?
EN

Database Administration用户
提问于 2021-01-05 23:37:41
回答 1查看 397关注 0票数 0

我需要写一个查询,其中我需要首先数一数剧院中眼镜的门票,然后计算每家剧院销售的平均票数,并将其舍入小数点后两位,这些值必须按照售出的票数进行排序。原则上,我想找出每家剧院平均售出的票数。对于这个查询,我必须使用AVG()和循环()。我尝试了很多不同的选择,但我有不同的错误。当我试图运行此程序时,出现了以下错误:

SQL错误: ORA-00937:不是单个组函数

代码语言:javascript
复制
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子句,但出现了另一个错误:

代码语言:javascript
复制
SQL Error: ORA-00933: SQL command not properly ended

我确信问题在于我试图使用COUNT ()和AVG(),但我真的不知道在这一点上做什么,并希望得到任何帮助。

EN

回答 1

Database Administration用户

发布于 2021-01-06 00:46:04

当前版本给出了一个错误,因为您试图获得一个聚合函数(平均值)而不是另一个聚合函数(计数);它与round无关。据我所知,您希望输出id_theater、id_spectacle、每个剧院和眼镜的票数,以及每个剧院的平均票数。有一种方法(从性能角度看很可能不是最快的)是

代码语言:javascript
复制
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语法,这样更容易读

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/282636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档