我有一个名为Vehicle_Location的表,其中包含列(以及更多):
ID NUMBER(10)
SEQUENCE_NUMBER NUMBER(10)
TIME DATE
Run Code Online (Sandbox Code Playgroud)
而我正在尝试获取每个ID每天的最小/最大/平均记录数.
到目前为止,我有
select id, to_char(time), count(*) as c
from vehicle_location
group by id, to_char(time), min having id = 16
Run Code Online (Sandbox Code Playgroud)
这给了我:
ID TO_CHAR(TIME) COUNT(*)
---------------------- ------------- ----------------------
16 11-05-31 159
16 11-05-23 127
16 11-06-03 56
Run Code Online (Sandbox Code Playgroud)
所以我想得到count(*)列的min/max/avg.我使用Oracle作为我的RDBMS.
我没有要测试的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
Run Code Online (Sandbox Code Playgroud)
以下是对它的一些解读:http:
//www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/
编辑:尽管通常这是一个糟糕的主意,选择两者中MIN,并MAX在一个单一的查询.
EDIT2:最小/最大问题与某些RDBMS(包括oracle)如何处理索引列上的聚合有关.这可能不会影响这个特定的查询,但前提是,它很容易使用索引找到要么MIN 还是在MAX,但不能同时在同一时间,因为任何指标可能无法有效地使用.
以下是对它的一些解读:http:
//momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html
| 归档时间: |
|
| 查看次数: |
5128 次 |
| 最近记录: |