Visualizzazione risultati 1 fino 7 di 7

Discussione: [mysql] Unire DISTINCT e SUM

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Question [mysql] Unire DISTINCT e SUM

    Ciao a tutti!
    Vi faccio vedere direttamente un esempio.
    Codice:
    COL1     |     COL2
    1        |     2
    1        |     3
    4        |     5
    Dovrei prendere in considerazione una sola volta per valore "COL1" (quindi con DISTINCT - la riga più recente) e sommare i valori di "COL2".
    Quindi prenderei in considerazione: "1|2" e "4|5", sommando "2" e "5": il risultato dovrebbe essere "7" (you don't say?).
    Grazie mille per il vostro aiuto... senza di voi non saprei proprio come fare!

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Così come ce l'hai presentato non si può fare solo con una query (e mi sfugge anche il senso: perché dovrei sommare 2+5 e non 3+5).

    Non c'è un campo con un id univoco?


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Sì, il campo dell'ID c'è.
    Faccio 2+5 e non 3+5 perché la riga con il due ha l'ID più elevato (ed è quindi più recente).
    Non importa eseguire più query, non è quello il problema...
    Avevo pensato ad eseguire la query con DISTINCT ed eseguire un while ma se dovessi avere troppi risultati (come spero ) rallenterebbe troppo la pagina...

  4. #4
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Se c'è l'id devi usare una query del genere:

    Codice:
    SELECT SUM(c2)
    FROM t AS t1
    WHERE NOT EXISTS (SELECT 1 FROM t AS t2 WHERE t2.c1 == t1.c1 AND t2.id > t1.id)


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  5. #5
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Non capisco la query...
    Potrebbero esserci anche più di due risultati con lo stesso valore...
    Lo script mi serve per far votare i film ai visitatori.
    Utilizzando questo codice non da errori con error_reporting(), ma non restituisce niente.
    Codice PHP:
    $query = mysql_query("SELECT SUM(Voto) FROM FilmVoti AS SommaVoti WHERE EXISTS (SELECT DISTINCT IDUtente FROM FilmVoti WHERE IDFilm = '$idFilm' ORDER BY Data DESC LIMIT 1)") or die(mysql_error());
    $query['SommaVoti'] // = NULL
    Così, invece...
    Codice PHP:
    $query = mysql_query("SELECT SUM(Voto) FROM FilmVoti AS SommaVoti WHERE EXISTS (SELECT DISTINCT IDUtente FROM FilmVoti WHERE IDFilm = '$idFilm' ORDER BY Data DESC LIMIT 1)") or die(mysql_error());
    $query = mysql_fetch_array($query);
    $query['SommaVoti'] // = ERRORE
    Notice: Undefined index: SommaVoti in [...] on line [...]

  6. #6
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Non capisco la query...
    La query dice: prendi tutte le righe di t per le quali non esiste un'altra riga in t con lo stesso valore di c1 e un id maggiore.
    Quindi in sostanza prende la riga con id maggiore a parità di id.

    Le tue query fanno qualcosa di diverso.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  7. #7
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    E se volessi aggiungere un "WHERE" dove lo dovrei posizionare?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •