Visualizzazione dei risultati da 1 a 4 su 4

Discussione: SQL : MAX di un COUNT

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34

    SQL : MAX di un COUNT

    Dato

    le tabelle
    RIUNIONE(CodR , Descrizione, DataRiunione)
    DIPENDENTE(CodD, Nome, Cognome, DataNascita, Citta)
    PARTECIPA RIUNIONE(CodD, CodR )

    e la query:

    codice:
    SELECT A.CodR, COUNT( B.CodD ) AS Tot FROM partecipa_riunione AS A, dipendente AS B, riunione AS C WHERE A.CodR = C.CodR AND A.CodD = B.CodD GROUP BY CodR 
     -- Visualizza i codici delle riunioni ed il rispettivo numero di dipendenti partecipanti
    sto cercando di modificarla in modo che mi restituisca i CodR in cui ho il massimo numero di partecipanti.

    Ho provato così:

    codice:
    SELECT A.CodR, COUNT( B.CodD ) AS TotMax FROM partecipa_riunione AS A, dipendente AS B, riunione AS C, ( SELECT COUNT( B1.CodD ) AS Tot1 FROM partecipa_riunione AS A1, dipendente AS B1, riunione AS C1 WHERE A1.CodR = C1.CodR AND A1.CodD = B1.CodD GROUP BY A1.CodR ) AS D WHERE A.CodR = C.CodR AND A.CodD = B.CodD GROUP BY CodR HAVING ( TotMax = MAX( D.Tot1 ) )
    ma ho notato che il campo TotMax assume valori sbagliati e pertanto la query non va bene.

    Dove sbaglio? Oppure c'è un altro modo per fare quello che sto cercando di fare?
    Grazie in anticipo

  2. #2

    Re: SQL : MAX di un COUNT

    Chissà perché mi sembra tanto un esercizio che ti hanno assegnato a scuola/università...


    Innanzitutto per quanto riguarda la tua prima query che riporto (magari metti anche degli "a capo" così da facilitarci la lettura):
    codice:
    SELECT A.CodR, COUNT( B.CodD ) AS Tot
    FROM partecipa_riunione AS A, dipendente AS B, riunione AS C
    WHERE A.CodR = C.CodR AND A.CodD = B.CodD
    GROUP BY CodR 
     -- Visualizza i codici delle riunioni
         ed il rispettivo numero di dipendenti partecipanti
    Per avere i codici delle riunioni ed il rispettivo numero di dipendenti partecipanti con quella query vai a fare un JOIN tra tutte e tre le tabelle quando questo mi sembra del tutto inutile (sì, è proprio un esercizio che ti hanno assegnato )

    Magari basta questo:

    codice:
    SELECT A.CodR, COUNT( A.CodD ) AS Tot
    FROM partecipa_riunione AS A
    GROUP BY A.CodR
    Invece, per ottenere ciò che ti serve:

    codice:
    SELECT A.CodR, COUNT( A.CodD ) AS TotMax
    FROM partecipa_riunione AS A
    GROUP BY A.CodR
    HAVING COUNT( A.CodD )=(SELECT MAX(D.Tot1) FROM (
    SELECT COUNT( B.CodD ) AS Tot1
    FROM partecipa_riunione AS B
    GROUP BY B.CodR
    ) AS D)
    Non so se la query può essere riscritta in modo migliore o più efficiente, ma dovrebbe funzionare.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    34
    Ciao, ho trovato su internet alcuni esempi con queste tabelle ma in realtà la prima query che tu hai semplificato in maniera corretta, l'ho fatta io. Non vado a scuola nè all'università ma sto solo studiando un po' più approfonditamente SQL perchè finora lo avevo adoperato in maniera più blanda (quindi magari invece di usare subquery in SQL, usavo linguaggi lato server per eseguirle). Credo però che qeusti esempi sono sicuramente degli esercizi di Università o Scuola

    La tua soluzione è perfetta grazie! C'ero quasi arrivato pure io nel frattempo .

    p.s. Ora ho capito che per gli acapo bisogna mettere i tag CODE manualmente

  4. #4

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 © 2025 vBulletin Solutions, Inc. All rights reserved.