Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [MYSQL] trovare il gruppo che ha il maggior numero di libri

    Ciao.
    Ho una tabella di questo tipo:
    id gruppo codice Titolo prezzo quantita
    1 macromedia MC004 Macromedia Freehand 10 78.99 197
    2 macromedia MC003 Macromedia Flash 6 78.99 291
    3 macromedia MC002 Macromedia Director Shockwave 140.00 144
    4 macromedia MC001 Macromedia Authorware 6 98.99 237
    5 adobe AD001 Adobe Photoshop 7.0 340.00 498
    6 macromedia MC005 Macromedia Homesite 90.00 398
    7 macromedia MC006 Macromedia Sitespring 120.00 219

    con questa Query riesco a fare dei subtotali:
    Codice PHP:
     <?php 
    $Query 
    "SELECT gruppo, count( * )  AS tot 
    FROM  sql_libri 
    GROUP  BY gruppo 
    ORDER BY tot DESC 
    "

    ?>
    gruppo tot
    macromedia 7
    adobe 7
    corel 5
    scansoft 2
    curiouslabs 1

    Quel che vorrei fare ora è di estrarre solo i gruppi che hanno il maggior numero di libri o quelli che ne hanno di meno.
    Ho provato a creare una Query con delle subquery sia nella SELECT che nella WHERE ma non riesco a venirne a capo.

    Ringrazio se qualcuno può darmi una dritta


  2. #2
    ciao
    non sono tornato per dire di aver risolto, tutt'altro.
    Infatti sto facendo delle prove ma senza risultato. Mentre alcune query che sto provando causano errori di vario tipo ce n'è una che però, anche se diversa da quella mostrata prima, mi restituisce lo stesso recordset della prima.
    La query in questione è questa:
    codice:
    SELECT gruppo, max( tot ) 
    FROM ( 
    SELECT gruppo, count( * ) AS tot 
    FROM sql_libri 
    GROUP BY gruppo 
    ) AS tab1 
    GROUP BY gruppo 
    ORDER BY tot DESC 
    e mi restituisce la stessa sequenza mostrata nel post di apertura.
    Il secondo GROUP BY gruppo devo metterlo per evitare l'errore:
    Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
    Spero che si riesca ad ottenere solo i gruppi che hanno il maggior o il minimo numero di libri


  3. #3
    In questa query:
    "SELECT gruppo, count( * ) AS tot
    FROM sql_libri
    GROUP BY gruppo
    ORDER BY tot DESC
    ";
    aggiungi alla fine LIMIT 1
    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

  4. #4
    bomberdini e grazie per il suggerimento.
    A dire il vero ci avevo pensato anch'io al LIMIT, ma la vedo come una soluzione non veramente soddisfaciente.
    Infatti, come si vede dalla tabella mostrata sotto la mia Query per il test ci sono due gruppi con 7 libri. Facendo così escluderei il secondo gruppo.
    D'altra parte non mi aiuta nemmeno la seconda Query del secondo post perchè, bensì più complessa della prima, mi restituisce la stessa tabella.
    Si dovrà pensare a qualcosa di meglio.

  5. #5
    Quote Originariamente inviata da micdas Visualizza il messaggio
    bomberdini e grazie per il suggerimento.
    A dire il vero ci avevo pensato anch'io al LIMIT, ma la vedo come una soluzione non veramente soddisfaciente.
    Infatti, come si vede dalla tabella mostrata sotto la mia Query per il test ci sono due gruppi con 7 libri. Facendo così escluderei il secondo gruppo.
    D'altra parte non mi aiuta nemmeno la seconda Query del secondo post perchè, bensì più complessa della prima, mi restituisce la stessa tabella.
    Si dovrà pensare a qualcosa di meglio.
    In ogni caso anche il Max ti restituirebbe un solo valore.
    L'uso di LIMIT e' molto consigliato in quanto
    aiuta a rendere efficienti le query
    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
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    In ogni caso anche il Max ti restituirebbe un solo valore.
    L'uso di LIMIT e' molto consigliato in quanto
    aiuta a rendere efficienti le query
    Non mi sembra la migliore soluzione, ma inizierò da questa e magari cercando di nidificare anche varie funzioni e/o usando anche subquery.
    Intanto resto sempre in attesa di altri suggerimenti validi.


  7. #7
    Ecco, ho fatto ancora delle prove, ma mi sono fermato nella fase di preparazione della Query finale.
    La query attuale è questa:
    Codice PHP:
    $Query "SELECT gruppo, count( * )  AS tot
    FROM  sql_libri
    GROUP  BY gruppo
    HAVING count( * ) = 7 
    ORDER BY tot DESC
    "

    dove il MAX valore (7) da testare è messo manualmente dopo averlo osservato in altra query. In realtà il numero 7 dovrebbe essere calcolato dalla query stessa con la funzione MAX su una query secondaria che non riesco a preparare.
    Ho preparato anche una paginetta con le query usate da poter consultare.
    I dati e le query sono reali. In questo modo è più semplice tentare una soluzione se è possibile darla.


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.