Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369

    [SQL] - Query alterando i valori

    Salve a tutti.

    Io ho una tabella di questo tipo:

    Nome || 2011 || 2010 || 2009
    ----------------------------------
    AAAA || 5000 || 4000 || 8000
    GGGG || 2000 || 8000 || 7000
    HHHH || 3000 || 4000 || 6000

    Quello che vorrei fare io è una query che mi restituisca i 3 record, ordinati secondo la somma pesata dei 3 anni.

    Mi spego meglio: vorrei che il valore del 2011 contasse per il 100% nella somma, quello del 2010 per il 50%, mentre quello del 2009 per il 10%.

    Quindi io vorrei un output di questo tipo:

    Nome || Somma
    --------------------
    AAAA || 7800
    GGGG || 6700
    HHHH || 5600

    Dove 7800 = 5000+2000+800; 6700 = 2000+4000+700; 5600 = 3000+2000+600.

    Sperando di essermi spiegato, come posso fare una query che faccia questo? Grazie mille

    ps. avevo pensato di prendere i dati interi e calcolare le somme io, ma poi se il numero di record aumenta l'ordinamento manuale è molto più costoso

  2. #2
    devi avere almeno un'altra tabella con gli anni e i pesi relativi. fai le tue somme e poi con un'altra JOIN moltiplichi le somme/anno per il peso/anno

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select
    nome,
    `2011`+ `2010` * 0.5 + `2009` * 0.1 as somma 
    from tabella
    order by somma desc

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    Grazie mille

    e se invece la tabella fosse così?

    Nome || Anno || Valore
    ----------------------------------
    AAAA || 2011 || 5000
    AAAA || 2010 || 4000
    AAAA || 2009 || 8000
    GGGG || 2011 || 2000
    GGGG || 2010 || 8000
    GGGG || 2009 || 7000
    HHHH || 2011 || 3000
    HHHH || 2010 || 4000
    HHHH || 2009 || 6000

  5. #5
    in M$SQL si usa la CASE. che db usi (nel titolo esponi un "SQL" generico)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    mySQL

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select
    nome,
    sum(
    case 
    when anno = 2011 then valore 
    when anno = 2010 then valore * 0.5
    else valore * 0.1
    end
    ) as somma 
    from tabella
    where anno >= 2009
    group by nome
    order by somma desc

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    369
    wow grazie mille

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 © 2026 vBulletin Solutions, Inc. All rights reserved.