sql >> Databáze >  >> RDS >> Oracle

Získání min() sloupce count(*).

Nemám žádnou věštcovskou stanici, na které bych mohl testovat, ale měli byste být schopni zabalit agregátor kolem vašeho SELECT jako poddotaz/odvozená tabulka/inline zobrazení

Takže by to bylo (NEZKOUŠENÉ!!)

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

Zde je něco z toho:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

UPRAVIT: I když obvykle je to špatné nápad vybrat obě MIN a MAX v jediném dotazu.

EDIT2: Problém min/max souvisí s tím, jak některé RDBMS (včetně oracle) zpracovávají agregace na indexovaných sloupcích. Nemusí to mít vliv na tento konkrétní dotaz, ale předpokladem je, že je snadné použít index k nalezení MIN nebo MAX ale ne obojí současně, protože žádný index nemusí být použit efektivně.
Zde je něco k přečtení:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html




  1. zkombinujte dvě tabulky a zobrazte jejich data v poli

  2. Jak vložíte konstantu PHP do dotazu SQL?

  3. GROUP a COUNT() věkové skupiny v CakePHP

  4. MySQL:Vnořená GROUP_CONCAT