聚合函数-Avg在我的sql查询中不起作用

时间:2015-06-30 11:45:25

标签: sql oracle plsql

在我的查询中,我需要显示日期和平均年龄:

SELECT (SYSDATE-rownum) AS DATE,
       avg((SYSDATE - rownum)- create_time) as average_Age
FROM items
group by (SYSDATE-rownum)

但我的平均年龄输出不正确。它只是计算/显示(SYSDATE - rownum)- create_time的输出,但不计算它们的平均值,尽管我使用:avg((SYSDATE - rownum)- create_time)

有人可以告诉我为什么聚合函数AVG在我的查询中不起作用以及可能的解决方案

2 个答案:

答案 0 :(得分:0)

在select子句中,您既使用非聚合表达式,也使用聚合表达式。通过删除(SYSDATE-rownum) AS DATE状态,您将在整个数据集上生成结果。以这种方式,avg计算在整个数据集上......而不仅仅是每个记录检索。 然后你也可以放弃group by。最后你只需保留平均声明

SELECT avg((SYSDATE - rownum)- create_time) as average_Age
FROM items

答案 1 :(得分:0)

First you need to think on rows or group on which you need avg. this column will come in group by clause. as a simple thing if there is 5 rows with age of 20, 10, 20, 30 then avg will be (80/4=20) i.e. 20. so I think you need to fist calculate age by (sysdate - create_time).

eg.select months_between(sysdate,create_date)/12 cal3 from your_table

and then there will be outer query for avg on group.