Oracle
 sql >> Database >  >> RDS >> Oracle

Ottenere il min() di una colonna count(*).

Non ho una stazione Oracle su cui testare, ma dovresti essere in grado di avvolgere l'aggregatore attorno al tuo SELECT come sottoquery/tabella derivata/vista in linea

Quindi sarebbe (NON TESTATO!!)

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

Ecco alcune letture al riguardo:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

MODIFICA: Anche se normalmente è un cattivo idea di selezionare entrambi il MIN e MAX in un'unica domanda.

EDIT2: Il problema min/max è correlato al modo in cui alcuni RDBMS (incluso Oracle) gestiscono le aggregazioni su colonne indicizzate. Potrebbe non influire su questa particolare query, ma la premessa è che è facile utilizzare l'indice per trovare il MIN o il MAX ma non entrambi contemporaneamente perché qualsiasi indice potrebbe non essere utilizzato in modo efficace.
Ecco alcune letture al riguardo:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html