sql >> Base de Datos >  >> RDS >> Oracle

Obtener el min () de una columna de conteo (*)

No tengo una estación de Oracle para probar, pero debería poder envolver el agregador alrededor de su SELECT como subconsulta/tabla derivada/vista en línea

Entonces sería (¡¡NO PROBADO!!)

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

Aquí hay algunas lecturas al respecto:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

EDITAR: Aunque normalmente es un malo idea de seleccionar ambos el MIN y MAX en una sola consulta.

EDIT2: El problema mínimo/máximo está relacionado con la forma en que algunos RDBMS (incluido Oracle) manejan las agregaciones en columnas indexadas. Puede que no afecte a esta consulta en particular, pero la premisa es que es fácil usar el índice para encontrar el MIN o el MAX pero no ambos al mismo tiempo porque cualquier índice puede no usarse de manera efectiva.
Aquí hay algo de lectura al respecto:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html