Oracle
 sql >> Base de données >  >> RDS >> Oracle

Obtenir le min() d'une colonne count(*)

Je n'ai pas de station oracle sur laquelle tester, mais vous devriez pouvoir simplement enrouler l'agrégateur autour de votre SELECT en tant que sous-requête/table dérivée/vue en ligne

Ce serait donc (NON TESTÉ !!)

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

Voici quelques lectures à ce sujet :
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

MODIF : Bien que normalement ce soit un mauvais idée de sélectionner les deux le MIN et MAX en une seule requête.

EDIT2 : Le problème min/max est lié à la façon dont certains SGBDR (y compris Oracle) gèrent les agrégations sur des colonnes indexées. Cela peut ne pas affecter cette requête particulière, mais le principe est qu'il est facile d'utiliser l'index pour trouver soit le MIN ou le MAX mais pas les deux en même temps car tout indice peut ne pas être utilisé efficacement.
Voici quelques lectures à ce sujet :
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html