sql >> Database >  >> RDS >> Oracle

De min() van een count(*)-kolom ophalen

Ik heb geen orakelstation om op te testen, maar je zou de aggregator gewoon om je SELECT moeten kunnen wikkelen als een subquery/afgeleide tabel/inline-weergave

Dus het zou zijn (ONGETEST!!)

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 is wat over te lezen:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

BEWERKEN: Hoewel het normaal gesproken een slechte is idee om beide te selecteren de MIN en MAX in een enkele vraag.

EDIT2: Het min/max-probleem houdt verband met hoe sommige RDBMS (inclusief Oracle) aggregaties op geïndexeerde kolommen verwerken. Het heeft misschien geen invloed op deze specifieke zoekopdracht, maar het uitgangspunt is dat het gemakkelijk is om de index te gebruiken om de MIN te vinden. of de MAX maar niet beide tegelijk, omdat een index mogelijk niet effectief wordt gebruikt.
Hier is wat over te lezen:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html




  1. Kan een externe sleutel als primaire sleutel fungeren?

  2. hoe waarden met komma in te voegen? in switch-instructie

  3. LEN() versus DATALENGTH() in SQL Server

  4. TypeError:'NoneType'-object kan niet worden onderschreven in Flask, mysql-toepassing