Topic: Pubblico
- Composto da 12 Posts di 3 Utenti.
|
13 Agosto, 2010 06:23
|
#1
|
carlo75
Utente
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
Registrato: Jul, 2008
Posts: 867
Offline
|
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
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
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
Registrato: Jul, 2008
Posts: 867
Offline
|
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
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
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
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
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
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