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

Discussione: [MySQL] Problema SQL

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287

    [MySQL] Problema SQL

    Salve a tutti.

    Stavo scrivendo una query molto semplice e ho notato un comportamento errato.

    Chiedo a voi gentilmente chiarimenti :

    La query e' la seguente:
    SELECT MAX(valoreIndice) as massimo, nomeProdotto
    FROM Prodotto
    WHERE nomeOperazione = 'Guadagno'

    Ora stampando il risultato della query, il valore "massimo" e' effettivamente il valore del prodotto con Guadagno massimo... Mentre nomeProdotto NON e' il nome del prodotto corrispondente al valore massimo restituito...
    Come mai??? Qualcuno sa spiegarmi il perche??

    Grazie a tutti

  2. #2
    Questa è la cosa che scrivo più spesso su questo forum... se dovessi basarmi sul forum, direi che è il pitfall più comune!

    SELECT m.massimo, p.nomeProdotto
    FROM Prodotto p
    INNER JOIN (
    SELECT MAX(valoreIndice) AS massimo
    FROM Prodotto
    WHERE nomeOperazione = 'Guadagno'
    GROUP BY nomeOperazione
    ) m
    ON p.valoreIndice = m.massimo;
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    Ciao buongiorno..

    Ti ringrazio per la risposta, anche io avevo gia trovati una query alternativa per risolvere il problema.

    Non capisco pero a livello di logica ,

    Perche se prendo il massimo e stampo il nome del prodotto
    mi da il massimo corretto e un nome sbagliato ossia non quello del prodotto che ha il valore massimo

  4. #4
    perché non avendo tu dato indicazioni su come collegare il massimo al prodotto, l'animale prende il massimo e il primo prodotto che capita.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    Motivazione plausibile

    Vi posto la mia query per risolvere il problema , volevo chiedervi gentilmente cosa ne pensate :

    codice:
    SELECT li.valoreIndice as maxRicavo,li.nomePortata
    FROM LogIndice li 
    WHERE li.nomeOpLogIndice = 'Guadagno' and li.valoreIndice = (select max(li1.valoreIndice) from LogIndice li1 WHERE li1.nomeOpLogIndice = 'Guadagno'
    Alcuni nomi sono diversi da come scritto in precedenza ma e' la stessa query

  6. #6
    Originariamente inviato da mydb
    Motivazione plausibile
    Certo che è plausibile, ma perché io non riesco mai a farlo capire, e se ve lo spiega optime gli date ragione al primo colpo???
    (scherzo, optime)


    Vi posto la mia query per risolvere il problema , volevo chiedervi gentilmente cosa ne pensate :

    codice:
    SELECT li.valoreIndice as maxRicavo,li.nomePortata
    FROM LogIndice li 
    WHERE li.nomeOpLogIndice = 'Guadagno' and li.valoreIndice = (select max(li1.valoreIndice) from LogIndice li1 WHERE li1.nomeOpLogIndice = 'Guadagno'
    Io l'avrei fatta come JOIN (la tua è una "uncorrelated subquery"), ma non credo che cambi qualcosa in questo caso.

    Unica nota: hai tenuto presente vero che potrebbe restituire più di una riga? Se non vuoi che succede mettici un limit 1.
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  7. #7
    Originariamente inviato da optime
    perché non avendo tu dato indicazioni su come collegare il massimo al prodotto, l'animale prende il massimo e il primo prodotto che capita.
    Il primo prodotto che fisicamente trova nella tabella e "che corrisponde alla richiesta where.... "

    Un altro giochetto sarebbe quello di creare una tabella temporanea ordinata per DESC e poi estrarre il record. Ovviamente tanto per giocarci un po'.

    codice:
    create temporary table ciccio
    select * from LogIndice
    where nomeOperazione = 'Guadagno'
    order by valoreIndice desc
    limit 1;
    
    select * from ciccio;

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    Originariamente inviato da in the web


    Io l'avrei fatta come JOIN (la tua è una "uncorrelated subquery"), ma non credo che cambi qualcosa in questo caso.
    che differenza ce in generale?

    Unica nota: hai tenuto presente vero che potrebbe restituire più di una riga? Se non vuoi che succede mettici un limit 1.
    sisi e' considerato e gestito da codice

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    Originariamente inviato da piero.mac
    Il primo prodotto che fisicamente trova nella tabella e "che corrisponde alla richiesta where.... "
    ok perfetto grazie

    Un altro giochetto sarebbe quello di creare una tabella temporanea ordinata per DESC e poi estrarre il record. Ovviamente tanto per giocarci un po'.

    codice:
    create temporary table ciccio
    select * from LogIndice
    where nomeOperazione = 'Guadagno'
    order by valoreIndice desc
    limit 1;
    
    select * from ciccio;
    cosi pero non ottengo il massimo o sbaglio?

  10. #10
    Originariamente inviato da mydb
    cosi pero non ottengo il massimo o sbaglio?
    Ottieni il massimo di valoreIndice dove nomeOperazione = guadagno

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

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.