Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [MYSQL] Ottenere più campi con SELECT e MAX()

    Ciao Stavolta ho questo problema
    Ho una tabella di questo tipo:
    Codice PHP:
    id     gruppo         Titolo                 prezzo     quantita
    14     macromedia     Macromedia Authorware 6     98.99     237
    21     adobe         Adobe Photoshop 7.0         340.00     498
    20     macromedia     Macromedia Spectra         240.00     36
    22     adobe         Adobe After Effects 5.5     160.00     5
    23     adobe         Adobe Digital Video Collection     499.99     1
    24     adobe        Adobe GoLive
    /LiveMotion Pack    499.99     110
    2     corel         Bryce                 112.00     692
    33     curiouslabs     Poser 4 Pro             670.00     36
    34     scansoft     Kai
    `s PhotoSoap2         130.00     359
    35     scansoft     PhotoShow             230.00     179 
    Facendo così per ogni gruppo si ottiene il gruppo col prezzo più alto dei libri di ciascun gruppo
    Codice PHP:
    SELECT gruppoMAXprezzo ) AS max_prezzo
    FROM sql_libri
    GROUP BY gruppo
    ORDER BY max_prezzo 
    ottengo il risultato atteso dalla Query.
    Codice PHP:
    gruppo         max_prezzo
    scansoft     230.00
    macromedia     240.00
    corel         260.00
    adobe         499.99
    curiouslabs     670.00 

    Ma se a fianco del max_prezzo volessi vedere anche il titolo o i titoli che hanno questo max_prezzo non ci riesco.
    Ho provato con diverse combinazioni aggiungendo il titolo sia nella SELECT che nel GROUP BY ma non riesco ad ottenere le giuste righe.
    Ho anche provato ad aggiungere la clausola WHERE prezzo = MAX( prezzo ) dopo la FROM ottenendo solo errori (Invalid use of group function).

    Quel che chiedo è se è possibile visualizzare anche il titolo o i titoli che hanno il maggior prezzo.

    Grazie

  2. #2
    forse troverete più di uno di questo messaggio.
    Non è colpa mia, quando inviavo non vedevo il mio messaggio ed ho continuato ad inserirne più di uno, finchè mi sono arreso
    Se qualche admin o moderatore ne trovasse più di uno li cancelli tutti eccetto uno (questo possibilmente perchè è l'unico che riesco a vedere dopo tanti tentativi).
    Grazie
    Ultima modifica di micdas; 09-12-2013 a 22:10

  3. #3
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Già fatto, non preoccuparti

  4. #4
    Grazie
    ed ora attendo le risposte

  5. #5
    se vuoi inserire in select un campo quando hai un group by, quel campo deve apparire con una funzione di aggregazione.

    In MS Access ci sono 2 funzioni molto utili e intuitive : FIRST() , LAST()

    in mysql non ci sono ma puoi comunque usare MAX(),MIN()

    Quindi, aggiungi il campo che vuoi , ma con la funzione di aggregazione MAX o MIN
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  6. #6
    Ciao bomberdini e grazie per la risposta.
    Ora provo e faccio sapere.


  7. #7
    ok... attendiamo tue notizie
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  8. #8
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    se vuoi inserire in select un campo quando hai un group by, quel campo deve apparire con una funzione di aggregazione.

    In MS Access ci sono 2 funzioni molto utili e intuitive : FIRST() , LAST()

    in mysql non ci sono ma puoi comunque usare MAX(),MIN()

    Quindi, aggiungi il campo che vuoi , ma con la funzione di aggregazione MAX o MIN
    Ciao bomberdini
    Se non ho capito male ho modificato la precedente query
    codice:
    SELECT gruppo, MAX( prezzo ) AS max_prezzo
    FROM sql_libri
    GROUP BY gruppo
    ORDER BY max_prezzo
    con questa
    codice:
    SELECT gruppo, MAX( Titolo ) AS Titolo, MAX( prezzo ) AS max_prezzo
    FROM sql_libri
    GROUP BY gruppo
    ORDER BY max_prezzo
    ma come c'è da aspettarsi i due MAX mi ritornano rispettivamente i MAX (alfabetico o numerico) del titolo e del prezzo, ma non me li allinaea.
    Con questa seconda query ottengo questo
    codice:
    gruppo         Titolo             max_prezzo
    scansoft     PhotoShow         230.00
    macromedia     Macromedia Spectra     240.00
    corel         KPT Vector Effects     260.00
    adobe         Adobe Photoshop 7.0     499.99
    curiouslabs     Poser 4 Pro         670.00
    La reale situazione è invece questa:
    Gruppo adobe:
    max_prezzo = 499.99
    titoli corrispondenti:
    Adobe Digital Video Collection
    Adobe GoLive/LiveMotion Pack

    Gruppo corel:
    max_prezzo = 260.00
    titoli corisponenti:
    CorelDRAW

    Gruppo macromedia:
    max_prezzo = 240.00
    titoli corisponenti:
    Macromedia Spectra

    ecc per le altre voci.

    Quindi non credo di dover cercare il MAX anche del titolo, ma un approccio diverso alla query.

    Come dicevo prima potrei anche cimentarmi con una WHERE ma non so come fare per allineare i valori massimi dei titoli coi titoli stessi.

    Con la prima Query che ho presentato riesco solo ad allineare il gruppo col massimo prezzo dei titoli.
    O forse non posso propio pretendere di visualizzare, oltre al gruppo, i soli Titoli che hanno il prezzo maggiore?

  9. #9
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Il problema è che non sai ne puoi sapere quali saranno i valori assegnati alle altre colonne per ogni gruppo (gruppo creato dal group by).

    Vedi a questo link http://dev.mysql.com/doc/refman/5.7/...group-row.html , in pratica, da quello che ho capito, è quello che serve a te.



  10. #10
    credo di aver frainteso la richiesta.

    se ho ben capito dovresti aggiungere il campo titolo in select e fare group by(gruppo,titolo)
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

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.