我有一个名为Vehicle_Location的表,其中包含列(以及更多):
ID NUMBER(10)
SEQUENCE_NUMBER NUMBER(10)
TIME DATE
我正在尝试获取每个ID每天的最小/最大/平均记录数。
到目前为止,我有
select id, to_char(time), count(*) as c
from vehicle_location
group by id, to_char(time), min having id = 16
给了我:
ID TO_CHAR(TIME) COUNT(*)
---------------------- ------------- ----------------------
16 11-05-31 159
16 11-05-23 127
16 11-06-03 56
所以我想获得count(*)列的min / max / avg。我使用Oracle作为我的RDBMS。
答案 0 :(得分:9)
我没有要测试的oracle工作站,但你应该能够将聚合器包装在SELECT
周围作为子查询/派生表/内联视图
所以它会是(UNTESTED !!)
SELECT
AVG(s.c)
, MIN(s.c)
, MAX(s.c)
, s.ID
FROM
--Note this is just your query
(select id, to_char(time), count(*) as c from vehicle_location group by id, to_char(time), min having id = 16) as s
GROUP BY s.ID
以下是对它的一些解读:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/
编辑虽然通常选择 单一查询。
EDIT2:最小/最大问题与某些RDBMS(包括oracle)如何处理索引列上的聚合有关。它可能不会影响此特定查询,但前提是使用索引可以轻松查找MIN
或 MAX
,但不能同时查找两者,因为任何索引可能无法有效使用。
这里有一些阅读:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html