Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    [MySql] Raggruppamenti secondo diverse condizioni

    Ho l'ennesimo problema con l'sql.

    Posto un piccolo esempio di tabella per rendere il tutto più chiaro.

    codice:
    id      id_gruppo    eta    quanti
    1           1            21        12
    2           1            30        18
    3           1            31        15
    4           1            40        25
    5           2            22        20
    6           2            29        30
    7           2            23        17
    8           2            31        18
    Io vorrei ottenere le somme suddivise per fascia di età, ad esempio il totale di persone nella fascia 21-30, 31-40, ecc per ciascun gruppo

    Se faccio una query del genere

    select id_gruppo,sum(quanti) as range21_30 from raggruppamenti
    where eta between 21 and 30
    group by id_gruppo

    ottengo
    codice:
    id_gruppo   range21_30
    1               30
    2               67
    ma come faccio a usare più condizioni per ottenere
    codice:
    id_gruppo   range21_30   range31_40
    1                30            40
    2                67            18
    Mi illuminate?

  2. #2
    devi fare in modo che tutti quelli di un raggruppamento abbiano qualcosa in comune, e raggruppare per quello.

    Per esempio:
    SELECT
    CASE WHEN eta BETWEEN 21 AND 30 THEN 'fascia1'
    WHEN eta BETWEEN 31 AND 40 THEN 'fascia2'
    ELSE 'fascia3' END AS fascia, ....
    FROM ...
    GROUP BY fascia etc. etc.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Grazie skidx. Avevo immaginato dovessi usare il case ma l'avevo abbandonato perchè continuavo a ricevere errori dalla query. Purtroppo nonostante la tua risposta continuo a sbagliare qualcosa.

  4. #4
    Originariamente inviato da nicola75ss
    Grazie skidx. Avevo immaginato dovessi usare il case ma l'avevo abbandonato perchè continuavo a ricevere errori dalla query. Purtroppo nonostante la tua risposta continuo a sbagliare qualcosa.
    Puoi farlo anche con IF() annidati se lo preferisci al CASE, comunque posta l'intera query e l'errore che ricevi, sicuramente c'è un errore di sintassi da qualche parte.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da skidx
    Puoi farlo anche con IF() annidati se lo preferisci al CASE, comunque posta l'intera query e l'errore che ricevi, sicuramente c'è un errore di sintassi da qualche parte.
    Prima di risponderti avevo fatto diverse prove e cercato un pò in rete.
    Questa è una delle tante query provate. L'errore è sempre 1064, errore di sintassi.
    (check.....the right syntax to use near CASE WHEN eta BETWEEN 31 AND 40 THEN "fascia2" )
    La funzione sum relativa al campo quanti dove la devo inserire?

    select id_gruppo,
    CASE WHEN eta BETWEEN 21 AND 30 THEN "fascia1"
    CASE WHEN eta BETWEEN 31 AND 40 THEN "fascia2"
    else "fascia3"
    end as fascia
    FROM raggruppamenti
    GROUP BY id_gruppo,fascia

  6. #6
    Originariamente inviato da nicola75ss
    Prima di risponderti avevo fatto diverse prove e cercato un pò in rete.
    Questa è una delle tante query provate. L'errore è sempre 1064, errore di sintassi.
    (check.....the right syntax to use near CASE WHEN eta BETWEEN 31 AND 40 THEN "fascia2" )
    La funzione sum relativa al campo quanti dove la devo inserire?

    select id_gruppo,
    CASE WHEN eta BETWEEN 21 AND 30 THEN "fascia1"
    CASE WHEN eta BETWEEN 31 AND 40 THEN "fascia2"
    else "fascia3"
    end as fascia
    FROM raggruppamenti
    GROUP BY id_gruppo,fascia
    non devi ripetere la parola CASE, serve solo per aprire il blocco.

    dopo "as fascia" (o prima del case) puoi mettere tutti gli altri campi che ti servono.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da skidx
    non devi ripetere la parola CASE, serve solo per aprire il blocco.

    ho anche un libro sotto il naso e pur avendo riletto la query tante volte non me ne rendevo conto. Grazie, ora vedo se riesco a ottenere il risultato che voglio.

    edit
    select id_gruppo,sum(quanti) as totale,
    CASE
    WHEN eta BETWEEN 21 AND 30 THEN "fascia1"
    WHEN eta BETWEEN 31 AND 40 THEN "fascia2"
    else "fascia3"
    end as fascia
    FROM raggruppamenti
    GROUP BY id_gruppo,fascia

    così funziona. Sbagliavo dall'inizio perchè usavo case per ogni condizione e non me ne accorgevo. Grazie ancora skidx. Mi spiace non poter mai ricambiare ma le tue domande son fuori dalla mia portata.

  8. #8
    Originariamente inviato da nicola75ss

    ho anche un libro sotto il naso e pur avendo riletto la query tante volte non me ne rendevo conto.
    L'avevo scritta sbagliata pure io, ma poi ho editato appena ho riletto. Magari l'hai copiata in quei pochi secondi prima della modifica e ti ha tratto in inganno il mio errore.

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ah ecco, sicuramente è andata così e prima sbagliavo pure qualcos'altro. Grazie ancora.

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.