Query, subquery o cosa altro? | SQL & MySQL

Topic: Pubblico - Composto da 12 Posts di 3 Utenti.

13 Agosto, 2010 06:23 #1
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
Ciao a tutti, volevo esporvi il mio problema, sperando che qualcuno di voi mi sappia aiutare a trovare la soluzione. Per prima cosa vi faccio un esempio dei dati che ho a mia disposizione [b]codice luogo       validato[/b] COD0001          SOSPESO COD0001          SI COD0001          SI COD0001          NO COD0002          SI COD0002          SI COD0002          SI Ed ecco l'obbiettivo, con una query devo sapere quante occorrenze univoche ci sono nella colonna [b]codice luogo [/b]([i]nell'esempio sono 2 ovvero COD0001 e COD0002[/i]) E fin qui tutto bene, il problema si pone quando come parametro aggiuntivo alla query voglio conoscere anche lo stato della validazione, ovvero contare ad esempio il numero delle occorrenze codice luogo che sono anche validate: nella tabella esempio dovrebbe uscire soltanto il codice luogo COD0002 in quanto tutti i suoi record sono stati validati con il valore SI, ma nella mia query invece esce anche il COD0001, cosa che in realtà non dovrebbe, perché presenta dei valori di validazione diversi da SI... Se può essere d'aiuto posso postare anche la mia query però non volevo mettervi fuori strada... potete darmi una mano? Grazie in anticipo e a presto!
13 Agosto, 2010 07:29 #2
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 867
Offline
Segui g2d su Twitter!
Ciao Carlo75, Grazie per la tua perseveranza, come ti ho accennato stiamo lavorando molto al sito approfittando di questo scorcio d'estate ed erano saltati i link, scusami a nome di tutto lo staff. Mi faccio perdonare subito. Penso che la query che ti serve è questa select codiceluogo, count(validato) as NumeroValidati from tabella where validato='SI 'group by codiceluogo Spero di non aver sbagliato a capire, in tal caso posta un esempio di risultato... Grazie Saluti algweb

Un tempo ero algweb ora sono g2d

13 Agosto, 2010 09:17 #3
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
Ciao algweb, ti ringrazio per la pronta risposta: la query da te suggerita restituisce conteggiando il numero di tutti i record che contengono il campo validato = SI; in realtà a me server qualcosa di molto più difficile da realizzare. La query in sostanza eseguita sui record di cui sopra, mi dovrebbe restituire [u]soltanto[/u] il codiceluogo [b]COD0002[/b] a significare completamente validato ([i]ovvero tutti valori SI[/i]) infatti solo COD0002 ha [u]tutti[/u] i record validati con SI, mentre CD0001 no (2 si, 1 no e 1 sospeso). Con la tua query invece otterrei COD0001 2 e COD0002 3. Spero di essermi spiegato un po' meglio stavolta...
13 Agosto, 2010 09:19 #4
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
Tanto per darti un'idea... ecco la query che sto cercando di ottimizzare SELECT COUNT( * )  FROM ( SELECT COUNT( codiceluogo )  FROM  `tabella`  AND `validazione`='valore' GROUP BY codiceluogo  HAVING COUNT( codiceluogo ) >0 ) AS temp
13 Agosto, 2010 13:06 #5
g2d
Moderatore

g2d
Registrato: Jul, 2008
Posts: 867
Offline
Segui g2d su Twitter!
Ciao carlo75, beh effettivamente non avevo capito molto ed effettivamente è una bella query da risolvere! Una domanda... hai un'applicazione che può darti una mano ? o è solo sql ? Come avrai già notato sarebbe molto comodo ciclare sui codiciluogo.... Vabbè cmq io ho ancora qualche ora (prima di partire) per ragionarci ..... mi faccio vivo appena riesco a mettere su qualcosa.... Algweb

Un tempo ero algweb ora sono g2d

23 Agosto, 2010 08:44 #6
darasc
Moderatore

darasc
Registrato: Jul, 2010
Posts: 64
Offline
Ciao Carlo 75, vedo dalla tua query che alla linea 5 c'è un AND dove forse dovrebbe esserci una WHERE...comunque se ho capito bene il problema questa query dovrebbe risolverlo: SELECT count(*) from  (select distinct codice_luogo from tabella where validato='si' and codice_luogo not in  (select codice_luogo from tabella where validato<>'si') ) as temp la query conta tutti i codici_luogo che sono stati completamente validati escludendo qualsiasi codice_luogo abbia una validazione diversa da 'si'. Spero di essere stato d'aiuto. Ciao.
23 Agosto, 2010 09:00 #7
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
Ti ringrazio darasac, l'ho provata subito e sembrerebbe essere corretta; ora definisco meglio alcuni test per confermarne la bontà! Grazie mille comunque...
23 Agosto, 2010 09:08 #8
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
mmmm, purtroppo sembrerebbero esserci delle stranezze: funziona perfettamente se ho più di [b]2[/b] codice_luogo, mentre se non ho di meno non mi vengono conteggiate nel risultato finale... non capisco proprio perché!?[color=#505050] [/color]
23 Agosto, 2010 09:13 #9
darasc
Moderatore

darasc
Registrato: Jul, 2010
Posts: 64
Offline
Potresti postarmi il set di dati sul quale la query ti dà problemi? Io per scrivere la query ho utilizzato il set di dati che hai postato in precedenza.
23 Agosto, 2010 09:22 #10
carlo75
Utente

carlo75
Registrato: Aug, 2010
Posts: 9
Offline
Ciao darasc, quelli di prima sono alcuni dati demo per far comprendere il problema, in realtà i dati su cui va ad operare sono circa 2500 record, se vuoi ti metto qualche esempio pratico: 007 NO 007 NO 009 SI 009 SI 010 SI 010 SI 010 SI 016 SI 016 SI e così via. Nella query inserita mi conta sostanzialmente 1, anziché 3

Condividi su:

Loggati o Registrati per replicare