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

Hentning af min() for en count(*) kolonne

Jeg har ikke en orakelstation at teste på, men du burde være i stand til bare at pakke aggregatoren rundt om din SELECT som en underforespørgsel/afledt tabel/inline-visning

Så det ville være (UTESTET!!)

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

Her er noget at læse om det:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

EDIT: Selvom det normalt er en dårlig idé at vælge begge MIN og MAX i en enkelt forespørgsel.

EDIT2: Min/maks-problemet er relateret til, hvordan nogle RDBMS (inklusive oracle) håndterer aggregeringer på indekserede kolonner. Det påvirker muligvis ikke denne specifikke forespørgsel, men forudsætningen er, at det er nemt at bruge indekset til at finde enten MIN eller MAX men ikke begge på samme tid, fordi ethvert indeks muligvis ikke bruges effektivt.
Her er noget at læse om det:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html




  1. Sådan grupperes tid efter time eller med 10 minutter

  2. Er det muligt at udføre en streng i MySQL?

  3. MSSQL-fejl 'Den underliggende udbyder mislykkedes ved åben'

  4. Kolonnen 'gruppe' forårsager på en eller anden måde en syntaksfejl