获取count(*)列的min()

时间:2011-06-07 00:21:53

标签: sql oracle

我有一个名为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。

1 个答案:

答案 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