sql >> Databasteknik >  >> RDS >> Oracle

Hämta min() för en count(*) kolumn

Jag har ingen orakelstation att testa på men du borde kunna linda aggregatorn runt din SELECT som en underfråga/härledd tabell/inbäddad vy

Så det skulle vara (OTESTAD!!)

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

Här är lite läsning om det:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

EDIT: Även om det normalt är en dålig idé att välja båda MIN och MAX i en enda fråga.

EDIT2: Min/max-problemet är relaterat till hur vissa RDBMS (inklusive oracle) hanterar aggregering på indexerade kolumner. Det kanske inte påverkar just den här frågan men förutsättningen är att det är lätt att använda indexet för att hitta antingen MIN eller MAX men inte båda samtidigt eftersom alla index kanske inte används effektivt.
Här är lite läsning om det:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html




  1. Vad är en kvalitetsutvecklingsmiljö för att skriva Oracle SQL?

  2. En översikt över uppdragens senaste databasövervakningstjänst - Spotlight Cloud

  3. query cache fungerar inte

  4. Anslut Java till en MySQL-databas