PDA

View Full Version : [Postgres] Query un po Intrigata...


race2
17-03-2008, 12:25
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;

gugoXX
17-03-2008, 12:35
Conti il numero di record per ciascun numero di telefono, e tieni solo quelli il cui conteggio e' proprio uguale ad 1

race2
17-03-2008, 14:07
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.

gugoXX
17-03-2008, 14:27
select numero,count(*) cnt
FROM tabella
GROUP BY numero
HAVING count(*)=1

race2
17-03-2008, 14:40
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;

gugoXX
17-03-2008, 14:44
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.

race2
17-03-2008, 14:59
[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.

gugoXX
17-03-2008, 15:18
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.

race2
17-03-2008, 15:42
Perfetto, grande, veramente grazie, mi hai salvato da nolti casini, grazie ancora, a presto, ciao!!