allora, se ho capito bene tu vuoi sapere per ogni agente quanti clienti ha visitato giusto? e in più vorresti sapere di che tipologia sono...Originariamente inviato da newbobotime
quello che volevo io era sapere oltre al numero di clienti il tipo di appartenenza, dove sbaglio ?![]()
se rifletti un attimo, una query del genere dovrebbe ritornare un risultato disomogeneo. Infatti, prendi in considerazione l'agente giorgio, ha visitato 3 clienti, due di tipo B e uno di tipo S. Cosa ti aspetti che ci sia nella tabella risultato?
questa riga?
sarebbe sbagliata,codice:tot tipo agente 3 B giorgio
ma anche questa lo sarebbe
codice:tot tipo agente 1 S giorgio
Al massimo potresti aspettarti una cosa del genere:
Vediamo come fare una cosa del genere:codice:tot tipo agente 2 B giorgio 1 S giorgio
innanzi tutto dobbiamo visualizzare per ogni visita, il nome dell'agente e il tipo di cliente visitato, e facciamo così:
e otteniamocodice:SELECT tipo, agente FROM clienti, visite WHERE cod_cliente = codice_cliente ORDER BY agente ASC;
a questo punto, vorremmo che le prime due righe non vengano ripetute tutte e due (essendo uguali) ma compaiano una sola volta con contatore 2, giusto?codice:tipo agente B giorgio B giorgio S giorgio B marco B pippo S pippo
quindi basa raggruppare secondo i campi che abbiamo visualizzato.
e otteniamocodice:SELECT tipo, agente FROM clienti, visite WHERE cod_cliente = codice_cliente GROUP BY tipo, agente ORDER BY agente ASC;
N.B. se provi a raggruppare solo rispetto a tipo o ad agente avrai un risultato che non rispetterà quello che vogliamo. Raggruppando rispetto ad agente, tutte le righe che presentano agente "giorgio" verranno accorpate in un unica riga, perdendo le informazioni riguardanti il tipo di clienti. In questo caso nella colonna tipo verrà messo un valore a caso tra quelli presenti nelle varie righe in cui compare giorgio. Stesso discorso raggruppando rispetto a tipo.codice:tipo agente B giorgio S giorgio B marco B pippo S pippo
a questo punto il passo finale consiste nel mostrare per ogni coppia (tipo, agente) il numero di volte che tale visista è stata effettuata.
Useremo quindi la funzione count
e la query sarà:
e quello che otterremo sarà:codice:SELECT COUNT(*) as Tot, tipo, agente FROM clienti, visite WHERE cod_cliente = codice_cliente GROUP BY tipo, agente ORDER BY agente ASC;
e in questo caso il risultato è coerente con le informazioni contenute nel db.codice:Tot tipo agente 2 B giorgio 1 S giorgio 1 B marco 1 B pippo 1 S pippo
Spero di esserti stato d'aiuto. In definitiva, il tuo errore era che cercavi di ottenere che di per sè non voleva dire niente, in quanto per ogni agente puoi sapere il numero di visite effettuate, ma non puoi attribuire a tale numero un tipo solo di cliente, a meno che tu non sappia a priori che ogni agente visista una sola tipologia di clienti..
Se hai altri dubbi chiedi pure!

Rispondi quotando
