Получение min () столбца count (*) - PullRequest
4 голосов
/ 07 июня 2011

У меня есть таблица с именем Vehicle_Location, содержащая столбцы (и более):

ID               NUMBER(10)
SEQUENCE_NUMBER NUMBER(10) 
TIME            DATE 

и я пытаюсь получить минимальное / максимальное / среднее количество записей в день на один идентификатор.

Пока у меня есть

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 (*). Я использую Oracle в качестве моей СУБД.

1 Ответ

9 голосов
/ 07 июня 2011

У меня нет станции оракула для тестирования, но вы можете просто обернуть агрегатор вокруг вашего SELECT как подзапрос / производная таблица / встроенное представление

Так будет (НЕПРОВЕРЕНО!)

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/

РЕДАКТИРОВАТЬ: Хотя обычно это плохая идея выбрать оба MIN и MAX в одном запросе.

EDIT2: Проблема min / max связана с тем, как некоторые СУБД (включая Oracle) обрабатывают агрегации в индексированных столбцах. Это может не повлиять на этот конкретный запрос, но предпосылка заключается в том, что с помощью индекса легко найти либо MIN , либо * MAX, но не оба одновременно, поскольку любой индекс нельзя использовать эффективно.
Вот что читает:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...