Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Problema Query Mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42

    Problema Query Mysql

    Ciao a tutti,
    ho un problema con una query che mi sta facendo sclerare da un po di giorni....
    La struttura del db è così:
    INSEGNANTE( matricola ,nome,cognome,città)
    SCUOLA(id ,nome,città)
    SUPPLENZA(matricola ,id ,anno,mese,durata)

    Devo fare una query che trovi l'insegnante o gli insegnanti con il maggior numero di supplenza per anno.

    Io lo fatta così ma non va:

    select insegnante.nome,insegnante.cognome,count(supplenza .matricola) AS supp_anno
    from insegnante,supplenza
    where insegnante.matricola=supplenza.matricola
    group by supplenza.matricola,supplenza.anno
    having MAX(supp_anno);

    Ho provato anche a mettere nel where una cosa del tipo MAX(count(supplenza.matricola))
    oppure a creare una vista e poi scorrerla e confrontarla con MAX(supp_anno) ma niente.....

  2. #2
    select insegnante.nome, insegnante.cognome, count(supplenza.matricola) AS supp_anno
    from insegnante, supplenza
    where insegnante.matricola=supplenza.matricola
    group by supplenza.matricola, supplenza.anno
    order by supp_anno desc
    limit ....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42
    ....così però avevo provato anche io fino alla group by ma ti restituisce il numero di supplenze per ogni anno per ogni matricola e li ordina in ordine decrescente....poi fai limit e ti limita i risultati a quanti ne vuoi....però non risolve la query

  4. #4
    Originariamente inviato da alby.82
    ....così però avevo provato anche io fino alla group by ma ti restituisce il numero di supplenze per ogni anno per ogni matricola e li ordina in ordine decrescente....poi fai limit e ti limita i risultati a quanti ne vuoi....però non risolve la query
    non dici quale sia il problema, cos'e' che non va ma solo quello che vuoi ottenere. La query ottiene quello che chiedi. Per altre cose specifica nel dettaglio.

    Posso pensare che hai piu' record supplenza o chissa che'. Prova cosi':

    codice:
    select *, count(*) AS supp_anno
    from supplenza
    left join insegnante ON insegnante.matricola=supplenza.matricola 
    group by supplenza.matricola, supplenza.anno
    order by supp_anno desc
    limit ....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42
    forse non mi sono spiegato bene... devo ottenere solo l'insegnante che ha fatto più supplenze in un anno. se nel 2000 rossi ha fatto 3 supplenze e bianchi 2 e verdi 3 devo ottenere rossi e verdi. ok?

  6. #6
    Originariamente inviato da alby.82
    forse non mi sono spiegato bene... devo ottenere solo l'insegnante che ha fatto più supplenze in un anno. se nel 2000 rossi ha fatto 3 supplenze e bianchi 2 e verdi 3 devo ottenere rossi e verdi. ok?
    non puoi sapere se saranno due o piu'. Controlla in php il result set ordinato DESC.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Prova....
    codice:
    select insegnante.nome,insegnante.cognome,count(supplenza.matricola) AS supp_anno
    from insegnante,supplenza
    where insegnante.matricola=supplenza.matricola and supplenza.anno = x
    group by supplenza.matricola
    having supp_anno = 
    (select max(supp_anno) from 
    (select count(*) as supp_anno from insegnante,supplenza
    where insegnante.matricola = supplenza.matricola and supplenza.anno = x
    group by supplenza.matricola))
    Ho l'impressione che si possa fare anche meglio, ma ora non mi viene...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42
    ....non va neanche così ci avevo già provato a fere una query nidificata nell'having ma mi da errore.... dice Every derived table must have its own alias.....

    Ho provato anche a fare una query nidificata nel where ma mi dice che non conosce nessun supp_anno.....

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42
    Perchè se faccio semplicemente:

    select insegnante.nome,insegnante.cognome,count(supplenza .matricola) AS supp_anno
    from insegnante,supplenza
    where insegnante.matricola=supplenza.matricola and supplenza.anno
    group by supplenza.matricola
    having supp_anno > 3;

    ....funziona e se voglio il massimo valore faccio:

    select insegnante.nome,insegnante.cognome,count(supplenza .matricola) AS supp_anno
    from insegnante,supplenza
    where insegnante.matricola=supplenza.matricola and supplenza.anno
    group by supplenza.matricola
    having MAX(supp_anno);

    ......non mi da errori ma mi dice che è vuoto?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    42
    .........nessuno riesce a darmi una soluzione????

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.