Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Abrufen der min() einer count(*)-Spalte

Ich habe keine Oracle-Station zum Testen, aber Sie sollten in der Lage sein, den Aggregator einfach um Ihr SELECT zu wickeln als Unterabfrage/abgeleitete Tabelle/Inline-Ansicht

Es wäre also (UNGETESTET!!)

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

Hier ist etwas Lektüre dazu:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

BEARBEITEN: Obwohl es normalerweise schlecht ist Idee, beide auszuwählen die MIN und MAX in einer einzigen Abfrage.

EDIT2: Das Min/Max-Problem hängt damit zusammen, wie einige RDBMS (einschließlich Oracle) Aggregationen für indizierte Spalten handhaben. Dies wirkt sich möglicherweise nicht auf diese spezielle Abfrage aus, aber die Prämisse ist, dass es einfach ist, den Index zu verwenden, um entweder den MIN zu finden oder das MAX aber nicht beide gleichzeitig, da jeder Index möglicherweise nicht effektiv verwendet wird.
Hier ist etwas Lektüre dazu:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html