Oracle SQL-平均函数的最大值
我有一张桌子:Oracle SQL-平均函数的最大值,sql,oracle,group-by,Sql,Oracle,Group By,我有一张桌子: day |visitors_number -------------|--------------- 02/01/2020 |250 ... 说明: 1.一周中每一天的平均访客人数将一周中的某一天记录为文本:星期一, 星期二等等。。 我做到了: 一周中哪一天的平均参观人数最多? 我想使用上一个查询,但不想回写它。代码应该尽可能简单,使用MAX函数。先谢谢你。 我认为这是一个可以在外部查询中使用ROWNUM的查询。看看这个例子: 选择周中的子日期, ROUN
day |visitors_number
-------------|---------------
02/01/2020 |250
...
说明:
1.一周中每一天的平均访客人数将一周中的某一天记录为文本:星期一,
星期二等等。。
我做到了:
一周中哪一天的平均参观人数最多?
我想使用上一个查询,但不想回写它。代码应该尽可能简单,使用MAX函数。先谢谢你。
我认为这是一个可以在外部查询中使用ROWNUM的查询。看看这个例子: 选择周中的子日期, ROUNDsub.avg_访问者编号,0作为avg_访问者编号 从选择到CHARd.day,“day”作为每周的第天, AVGd.visitors\u number作为AVG\u visitors\u number 来自丹麦 分组到CHARd.day,“day” 按平均访客数量说明订购 其中ROWNUM=1; 下面是这个例子的一个例子 查询获取您的排序结果,并仅选择第一行。需要注意的一点是,我建议在排序之后再进行一轮,以便获得最准确的结果。以下是一些选项 首先是样本数据:
SQL> create table dane2_ as
2 (select trunc(sysdate, 'mm') + level - 1 day,
3 round(dbms_random.value(1, 10)) visitors_number
4 from dual
5 connect by level <= 14
6 );
Table created.
SQL> select * From dane2_ order by day;
DAY VISITORS_NUMBER
---------- ---------------
01.04.2020 9
02.04.2020 5
03.04.2020 8
04.04.2020 1
05.04.2020 6
06.04.2020 1
07.04.2020 9
08.04.2020 9
09.04.2020 5
10.04.2020 4
11.04.2020 7
12.04.2020 6
13.04.2020 4
14.04.2020 5
14 rows selected.
要与MAX函数一起使用的选项:
SQL> with temp as
2 (select day,
3 to_char(day, 'FMDay', 'nls_date_language=english') as day_written,
4 visitors_number
5 from dane2_
6 ),
7 avgs as
8 (select day_written,
9 round(avg(visitors_number)) as avg_visitors_number
10 from temp
11 group by day_written
12 )
13 select a.day_written
14 from avgs a
15 where a.avg_visitors_number = (select max(b.avg_visitors_number)
16 from avgs b
17 );
DAY_WRITTEN
------------------------------------
Wednesday
或者,您可以按降序排列它们并获取第一个:
SQL> with temp as
2 (select day,
3 to_char(day, 'FMDay', 'nls_date_language=english') as day_written,
4 visitors_number
5 from dane2_
6 ),
7 avgs as
8 (select day_written,
9 round(avg(visitors_number)) as avg_visitors_number,
10 rank() over (order by round(avg(visitors_number)) desc) rnk
11 from temp
12 group by day_written
13 )
14 select day_written
15 from avgs
16 where rnk = 1;
DAY_WRITTEN
------------------------------------
Wednesday
SQL>
你说的不写是什么意思?按原样,您只需在查询结束时添加FETCH FIRST ROW WITH TIES,即可获得具有最大平均访客数的天数。我想使用MAX函数而不是FETCH。您想让它更复杂吗?好的:-最简单的就是你的平均值的最大值。如果您也不想使用窗口函数,那么您应该将查询作为主查询和子查询使用两次,最好使用with子句编写。
SQL> with temp as
2 (select day,
3 to_char(day, 'FMDay', 'nls_date_language=english') as day_written,
4 visitors_number
5 from dane2_
6 ),
7 avgs as
8 (select day_written,
9 round(avg(visitors_number)) as avg_visitors_number
10 from temp
11 group by day_written
12 )
13 select a.day_written
14 from avgs a
15 where a.avg_visitors_number = (select max(b.avg_visitors_number)
16 from avgs b
17 );
DAY_WRITTEN
------------------------------------
Wednesday
SQL> with temp as
2 (select day,
3 to_char(day, 'FMDay', 'nls_date_language=english') as day_written,
4 visitors_number
5 from dane2_
6 ),
7 avgs as
8 (select day_written,
9 round(avg(visitors_number)) as avg_visitors_number,
10 rank() over (order by round(avg(visitors_number)) desc) rnk
11 from temp
12 group by day_written
13 )
14 select day_written
15 from avgs
16 where rnk = 1;
DAY_WRITTEN
------------------------------------
Wednesday
SQL>