SELEZIONA le occorrenze di una combinazione di colonne con una condizione minima su COUNT
Sto memorizzando alcuni dati ogni giorno in una tabella OptionsData. In questa tabella sono interessato a due colonne "asofdate" e "contract". La combinazione di asofdate + contratto dovrebbe essere unica: in caso contrario, devo fare un po 'di pulizia. Vorrei restituire 3 colonne come segue: asofdate !! contratto !! conteggio> 1
Questo mi permetterà di identificare i duplicati nella mia tabella. Ho provato quanto segue:
select asofdate, contract, count(*) mycount
from (select asofdate, contract
from public."OptionsData"
group by asofdate, contract
) AS DerivedTable
GROUP BY asofdate, contract
HAVING mycount > 1
ORDER BY mycount DESC
Ma questo restituisce un errore:
ERROR: column "mycount" does not exist
La stessa cosa accade se specifichi
HAVING DerivedTable.mycount > 1
(Ho anche provato un'istruzione WHERE invece di HAVING ma questo dà un altro errore:
ERROR: syntax error at or near "WHERE"
)
Inutile dire che sono un principiante in sql ...
Risposte
Non è possibile utilizzare un nome alias nella GROUP BY
clausola. Inoltre: perché la sottoquery? Riduce le righe a una per data e contratto, quindi se conti in seguito ottieni un conteggio di 1 per ogni coppia data / contratto.
select asofdate, contract, count(*) as mycount
from public.optionsdata
group by asofdate, contract
having count(*) > 1
order by mycount desc;