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

    [MySql] - Query ricerca massimo

    Ciao a tutti,

    ho un problema con una query mysql.

    Sinteticamente la query che vi incollerò qui sotto restituisce due colonne, la prima contenente un campo ID, e la seconda un valore intero, ricavato dalla somma di altri valori.

    codice:
    SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM
    (Consumabile.Prezzo) AS Totale
    
    
    FROM Consuma,Consumabile
    
    
    WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo
    
    
    GROUP BY Servizio;
    Ora, da questa devo estrarre tutti i massimi per quanto riguarda la colonna di destra(Totale) e il relativo ID.

    Sono riuscito a far selezionare il massimo con la prossima query.

    Il problema è che oltre a non riuscire a prendere l'ID associato al massimo, non riesco nemmeno a estrarre più di un massimo qualora ci sia.

    codice:
    SELECT MAX(Tot.Totale), Tot.Servizio  FROM (SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS Totale
    
    
    FROM Consuma,Consumabile
    
    
    WHERE
    
    
    Consuma.Consumabile_idTipo = Consumabile.idTipo
    
    
    GROUP BY Servizio) AS Tot;
    Gentilmente qualche idea?

    Grazie

  2. #2
    Quote Originariamente inviata da BaccoThe Visualizza il messaggio
    Ciao a tutti,

    ho un problema con una query mysql.

    Sinteticamente la query che vi incollerò qui sotto restituisce due colonne, la prima contenente un campo ID, e la seconda un valore intero, ricavato dalla somma di altri valori.

    codice:
    SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM
    (Consumabile.Prezzo) AS Totale
    
    
    FROM Consuma,Consumabile
    
    
    WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo
    
    
    GROUP BY Servizio;
    Ora, da questa devo estrarre tutti i massimi per quanto riguarda la colonna di destra(Totale) e il relativo ID.

    Sono riuscito a far selezionare il massimo con la prossima query.

    Il problema è che oltre a non riuscire a prendere l'ID associato al massimo, non riesco nemmeno a estrarre più di un massimo qualora ci sia.

    codice:
    SELECT MAX(Tot.Totale), Tot.Servizio  FROM (SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS Totale
    
    
    FROM Consuma,Consumabile
    
    
    WHERE
    
    
    Consuma.Consumabile_idTipo = Consumabile.idTipo
    
    
    GROUP BY Servizio) AS Tot;
    Gentilmente qualche idea?

    Grazie
    non ho ben capito.

    Dicci che tabelle hai, con quali attributi e cosa vuoi fare
    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

  3. #3
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    non ho ben capito.

    Dicci che tabelle hai, con quali attributi e cosa vuoi fare
    ujya.jpg

    Prendiamo in considerazione le tabelle Consuma e Consumabile, la mia query deve calcolare i servizi fotografici che mi sono costati di più.

    Il campo prezzo di Consumabile mi indica il costo di un determinato materiale, nella tabella consuma ci sono indicati tutti i materiali usati in un servizio.

    Sommando il prezzo di ogni materiale usato in un determinato servizio ottengo il costo totale di quel servizio.

    La prima query che ho postato estrae proprio questo: ID SERVIZIO e COSTO TOTALE.

    Se di questi volessi selezionare solo il più costoso(o nel caso i più costosi) come devo fare?

    Grazie mille

  4. #4
    io farei una vista o altro contenente questa query :

    SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM (Consumabile.Prezzo) AS Totale


    FROM Consuma,Consumabile


    WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo


    GROUP BY Servizio;

    poi mi farei select max totale....
    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

  5. #5
    Nella seconda query che ho messo nel primo post ho provato a fare esattamente quello che dici, l'output della query non è quello voluto:

    +-----------------+----------+| MAX(Tot.Totale) | Servizio |+-----------------+----------+| 474 | 1 |+-----------------+----------+1 row in set (0.01 sec)
    La colonna servizio non mostra l'id giusto(dovrebbe essere 493) e poi ho inserito appositamente due servizi che costano 474 ma ne viene mostrato uno solo...

  6. #6
    ce qualcosa che non mi quadra a livello di sintassi

    supponendo di fare una vista con la prima query.

    io scriverei

    select max(totale),servizio
    from vista

    molto semplicemente.
    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

  7. #7
    Purtroppo per scelta del docente, non posso utilizzare viste...e neanche query nidificate.Quindi ho provato con una query derivata, ma non va..

  8. #8
    ah c'e il constraint docente
    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

  9. #9
    Prova questa e dimmi se va:
    codice:
    SELECT lista.Servizio,Max.Massimo FROM (
    SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS Totale
    FROM Consuma,Consumabile
    WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo
    GROUP BY Servizio) AS lista, (
    SELECT MAX(Tot.Totale) AS Massimo FROM (SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS 
    
    
    Totale FROM Consuma,Consumabile WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo GROUP BY Servizio) AS Tot) AS Max
    WHERE Max.Massimo = lista.Totale;

  10. #10
    Quote Originariamente inviata da Smilator Visualizza il messaggio
    Prova questa e dimmi se va:
    codice:
    SELECT lista.Servizio,Max.Massimo FROM (
    SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS Totale
    FROM Consuma,Consumabile
    WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo
    GROUP BY Servizio) AS lista, (
    SELECT MAX(Tot.Totale) AS Massimo FROM (SELECT Consuma.ServizioFotografico_id_ServizioFotografico AS Servizio, SUM(Consumabile.Prezzo) AS 
    
    
    Totale FROM Consuma,Consumabile WHERE Consuma.Consumabile_idTipo = Consumabile.idTipo GROUP BY Servizio) AS Tot) AS Max
    WHERE Max.Massimo = lista.Totale;


    Daieeeeeeeeeee, bravissimo! Altro che bomberdini!

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.