Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Obtendo o min() de uma coluna count(*)


Eu não tenho uma estação oracle para testar, mas você deve conseguir apenas envolver o agregador em torno de seu SELECT como uma subconsulta/tabela derivada/exibição em linha

Então seria (NÃO TESTADO!!)
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

Aqui estão algumas leituras:
http://www.devshed.com/c/a/Oracle/Inserting-SubQueries-in-SELECT-Statements-in-Oracle/3/

EDITAR: Embora normalmente seja um ruim ideia de selecionar ambos o MIN e MAX em uma única consulta.

EDIT2: O problema min/max está relacionado a como alguns RDBMS (incluindo oracle) tratam agregações em colunas indexadas. Isso pode não afetar essa consulta específica, mas a premissa é que é fácil usar o índice para encontrar o MIN ou o MAX mas não os dois ao mesmo tempo porque qualquer índice pode não ser usado de forma eficaz.
Aqui está uma leitura:
http://momendba.blogspot.com/2008/07/min-and-max-functions-in-single-query.html