Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15

Discussione: [MySQL] Subquery Count

  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    Originariamente inviato da newbobotime
    quello che volevo io era sapere oltre al numero di clienti il tipo di appartenenza, dove sbaglio ?
    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...

    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?
    codice:
    
    tot    tipo    agente
    3       B        giorgio
    sarebbe sbagliata,

    ma anche questa lo sarebbe
    codice:
    
    tot    tipo    agente
    1       S        giorgio

    Al massimo potresti aspettarti una cosa del genere:
    codice:
    
    tot    tipo    agente
    2       B        giorgio
    1       S        giorgio
    Vediamo come fare una cosa del genere:

    innanzi tutto dobbiamo visualizzare per ogni visita, il nome dell'agente e il tipo di cliente visitato, e facciamo così:

    codice:
    SELECT tipo, agente
    FROM clienti, visite
    WHERE cod_cliente = codice_cliente
    ORDER BY agente ASC;
    e otteniamo
    codice:
    
    tipo     agente
    B         giorgio
    B         giorgio
    S         giorgio
    B         marco
    B         pippo
    S         pippo
    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?

    quindi basa raggruppare secondo i campi che abbiamo visualizzato.

    codice:
    SELECT tipo, agente
    FROM clienti, visite
    WHERE cod_cliente = codice_cliente
    GROUP BY tipo, agente
    ORDER BY agente ASC;
    e otteniamo
    codice:
    
    tipo     agente
    B         giorgio
    S         giorgio
    B         marco
    B         pippo
    S         pippo
    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.

    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à:

    codice:
    SELECT COUNT(*) as Tot, tipo, agente
    FROM clienti, visite
    WHERE cod_cliente = codice_cliente
    GROUP BY tipo, agente
    ORDER BY agente ASC;
    e quello che otterremo sarà:

    codice:
    
    Tot    tipo     agente
      2       B         giorgio
      1       S         giorgio
      1       B         marco
      1       B         pippo
      1       S         pippo
    e in questo caso il risultato è coerente con le informazioni contenute nel db.

    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!
    Jekkil

  2. #12
    Grazie Jekkil,
    con le vostre spiegazioni, a piccoli passi comincio a prendere confidenza.

    Approfitto ancora della tua sapienza e cortesia.

    Per molti sarà banale per me non lo è ancora, se volessi mettere in join il tutto con un altra tabella, magari un'anagrafica degli agenti dove ovviamente avremmo un campo univoco con la tabella visite, in questo caso prendiamo coem esempio il campo "agente" come dovrei scrivere la query ?






    .

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    per fare il join tra due tabelle hai diversi modi. Uno è quello di dichiararlo all'interno del FROM specificando il tipo di join (INNER, LEFT, OUTER....) facendo una cosa del genere:

    codice:
    SELECT *;
    FROM nome_tabella1 INNER JOIN tabella2 ON   e mettendo i campi che devono essere uguali (non ricordo esattamente la sintassi
    altrimenti puoi inserire il join nella WHERE, andando a specificare quale campo della tabella1 deve essere uguale alla tabella2.

    codice:
    SELECT *
    FROM tab1, tab2
    WHERE tab1.nomecampo1 = tab2.nomecampo2;
    naturalmetne il joi può riguardare più tabelle

    codice:
    SELECT *
    FROM tab1, tab2, tab3
    WHERE tab1.nomecampo1 = tab2.nomecampo2 AND tab2.nomecampo2 = tab3.nomecampo3;
    insomma...ti puoi sbizzarrire
    Jekkil

  4. #14
    Denghiù




    .

  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    356
    prego, di niende
    Jekkil

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.