View Full Version : [Postgres] Query un po Intrigata...
Scusatemi, mica potreste darmi una mano in una query bastarda che non riesco a eseguire ?
Nella tabella "query_result" ci sono una serie di telefonate da cellulare,
Nel "campo1" ci sono i numeri di cellulare,
Devo selezionare tutti i record dove il numero di cellulare non ha effettuato piu' di una chiamata, se un numero di cellulare ha effettueto anche solo 2 chiamate non devo selezionarne neppure una
Database Postgres:
---------------------------------------------
SELECT
public.query_result.campo1,
public.query_result.campo2,
public.query_result.campo3,
public.query_result.campo4,
public.query_result.campo5
FROM
public.query_result;
Conti il numero di record per ciascun numero di telefono, e tieni solo quelli il cui conteggio e' proprio uguale ad 1
Domanda1:
-----------------------------------------------
Devo selezionare tutti i record dove il numero di cellulare non ha effettuato piu' di una chiamata, se un numero di cellulare ha effettueto anche solo 2 chiamate non devo selezionarne neppure una
Risposta1:
-----------------------------------------------
Conti il numero di record per ciascun numero di telefono, e tieni solo quelli il cui conteggio e' proprio uguale ad 1
mi sembra che la domanda e la risposta coincidono, quindi e' un record doppio e quindi non e' da considerare, giusto ???
no dai, sto' schersando.....,
solo che il mio problema e' che non so come scriverla quella SELECT.
select numero,count(*) cnt
FROM tabella
GROUP BY numero
HAVING count(*)=1
ERROR: column "query_result.campo1" must appear in the GROUP BY clause or be used in an aggregate function
dato che ho piu' campi da selezionare non mi funziona se non aggiungo tutti in group by, sai siamo su POSTGRES,
ma allora se li metto tutti mi selezionera tutti i record e non solo quelli non duplicati........
Database Postgres:
---------------------------------------------
SELECT
public.query_result.campo1,
public.query_result.campo2,
public.query_result.campo3,
public.query_result.campo4,
public.query_result.campo5
FROM
public.query_result;
devi fare le cose per gradi.
Prima cerchi i numeri di telefono con la query che ho messo su'.
Poi usi quella query per tornare i join di nuovo con la tabella, per andare a prendere anche tutti gli altri campi di ciascuno dei numeri di telefono.
Postgres ha detto bene, in SQL standard durante una query di gruppo non puoi ritornare qualcosa che non sia nella GROUP BY o una funzione di gruppo (o una costante)
Chi lo permette (MySql) bara, e prima o poi ti riestituisce qualcosa che non ti aspetti.
[QUOTE=gugoXX;21600066]
Poi usi quella query per tornare i join di nuovo con la tabella, per andare a prendere anche tutti gli altri campi di ciascuno dei numeri di telefono.QUOTE]
scusami ma sono troppo indietro in sql per cogliere il senso della tua indicazione, non ci arrivo proprio, e' la prima volta oggi che mi trovo a lavorare i dati in questo modo.
SELECT * FROM tabella WHERE campo1 IN
(select campo1
FROM tabella
GROUP BY campo1
HAVING count(*)=1)
Ovvero, prendi tutti i record della tabella, il cui campo1 e' presente una sola volta nella tabella stessa.
Perfetto, grande, veramente grazie, mi hai salvato da nolti casini, grazie ancora, a presto, ciao!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.