Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26

    Query COUNT(*) tra due tabelle

    Ciao ragazzi, ho la necessità di eseguire una query mediante MySQL tra due tabelle per conoscere il numero di voti totalizzati dai nominativi presenti nella tabella “voti”.
    In breve ho creato due tabelle di cui, una chiamata “candidati”, e una chiamata “voti”.
    La tabella “candidati” è costituita da due colonne che sono, “ID” e “CANDIDATO”, mentre la tabella “voti” è costituita da 17 colonne che sono, “ID” – “SCHEDA_NULLA” – “VOTO_1” – “VOTO_2” – “VOTO_3” … “VOTO_15”. Ogni cella della tabella “voti” contiene solo un valore, che in questo caso è il nome del “CANDIDATO” preso dalla tabella “candidati”.
    Io personalmente ho eseguito diverse query ma nessuna mi restituisce perfettamente il risultato dovuto. Quello che cerco di ottenere è un elenco di nomi provenienti dalla tabella “candidati” con i relativi risultati affianco di ogni nome, ovviamente il conteggio va fatto dalla tabella “voti”.
    La prima query eseguita è stata:

    SELECT candidati.CANDIDATO,
    COUNT(*) AS NR_VOTI
    FROM voti, candidati
    WHERE CANDIDATO=candidati.CANDIDATO
    GROUP BY CANDIDATO;


    Questa query funziona dal punto di vista di raggruppamento, infatti ottengo perfettamente l’elenco dei nominativi (i candidati) ma come risultato, “NR_VOTI”, ottengo il numero dei record e non il conteggio dei nominativi presenti nelle colonne della tabella “voti”.
    Invece la query sotto riportata, restituisce correttamente il conteggio e il raggruppamento dei nominativi solo per una colonna e non, ovviamente, di tutta la tabella "voti":

    SELECT VOTO_1,
    COUNT(*) AS NR_VOTI
    FROM voti
    GROUP BY VOTO_1;



    La mia domanda quindi è, esiste un modo per contare il numero di voti, quindi il numero di nominativi ripetuti nell’intera tabella “voti” prendendo però i nominativi presenti nella tabella candidati?
    Ringraziandovi in anticipo, per ogni consiglio e/o aiuto che potrete darmi, vi saluto con affetto.
    Alessandro.

  2. #2
    prova ad usare SUM(nome_campo)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Originariamente inviato da mondobimbi
    prova ad usare SUM(nome_campo)
    In primis grazie per la risposta in questo giorno di festa, ma forse non ho saputo usare correttamente la funzione SUM perchè mi restituisce 0 come somma dei risultati.

    Ho scritto

    SELECT candidati.CANDIDATO,
    SUM(candidati.CANDIDATO) AS NR_VOTI
    FROM voti, candidati
    WHERE CANDIDATO=candidati.CANDIDATO
    GROUP BY CANDIDATO;


    esegue correttamente il gruppo ma restituisce 0 come somma, poi ho scritto

    SELECT candidati.CANDIDATO,
    SUM(voti.VOTO_1) AS NR_VOTI
    FROM voti, candidati
    WHERE CANDIDATO=candidati.CANDIDATO
    GROUP BY CANDIDATO;


    esegue correttamente il gruppo ma restituisce ancora 0, poi ho scritto

    SELECT candidati.CANDIDATO,
    SUM(*) AS NR_VOTI
    FROM voti, candidati
    WHERE CANDIDATO=candidati.CANDIDATO
    GROUP BY CANDIDATO;


    ma ovviamente mi da errore.
    Come dovrei scrivere la query secondo te/voi? Ancora grazie, ciao.

  4. #4
    non e' che si capisca granche' di come funziona la seconda tabella con quei voto1 - voto15

    Le funzioni di raggruppamento agiscono sulle colonne e non sulle righe. Quindi sommi i campi rispetto alla loro colonna e non rispetto ad altri campi. Se vuoi sommare i campi dello stesso record devi fare una semplice addizione elencando i campi da sommare. Ma se cosi' fosse mi sento di affermare che la struttura della tabella e' errata.

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

  5. #5
    rivedi la struttura della seconda tabella che dovrebbe essere una relazione uno-->molti, così strutturato

    id
    voto


    potresti avere nella prima tabella
    id=001
    candidato="bianchi"

    e nella seconda

    id="001"
    voto=0 --> potrebbe rappresentare la scheda nulla

    id="001"
    voto=28

    id="001"
    voto=14

    eccetera

    se vuoi identificare il codice esame aggiungi
    id
    codice_esame
    voto

    ciao
    sergio

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Si probabilmente l’errore è anche nella struttura della tabella “voti”, ogni cella non contiene un valore numerico ma un nominativo. Mi spiego meglio,

    Tabella “candidati”:
    | ID | CANDIDATO |
    | 1 | BLU GABRIELE |
    | 2 | GIALLO MICHELE |
    | 3 | ROSSO RAFFAELE |
    | 4 | VERDE URIELE |
    | 5 | VIOLA CAMAEL |
    | 6 | BIANCO HANIEL |

    | 45 | ARANCIO SANDALPHON |

    Tabella “voti”:
    | ID |SCHEDA_NULLA | VOTO_1 |VOTO_2 |VOTO_3 |VOTO_4 | VOTO_5 | VOTO_6 |VOTO_7 | …. VOTO_15 |
    | 1 | | BLU GABRIELE | ROSSO RAFFAELE | | | | | | | | | | | | | |
    | 2 | | BIANCO HANIEL | VERDE URIELE | VIOLA CAMAEL | GIALLO MICHELE | | | | | | | | | | | | |
    | 3 | | BLU GABRIELE | BIANCO HANIEL | ARANCIO SANDALPHON | GIALLO MICHELE | | | | | | | | | | | | |
    | 4 | NULLA | | | | | | | | | | | | | | | | |

    La query poi, vorrei che restituisse una cosa del genere:

    | CANDIDATO | NR_VOTI |
    | BLU GABRIELE | 2 |
    | GIALLO MICHELE | 2 |
    | ROSSO RAFFAELE | 1 |
    | VERDE URIELE | 1 |
    | VIOLA CAMAEL | 1 |
    | BIANCO HANIEL | 2 |

    | ARANCIO SANDALPHON | 1 |

    Come posso fare per ottenere un risultato, un conteggio simile? Anche cambiando la struttura delle tabelle. Grazie in anticipo, Alessandro.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    s.o.s.

  8. #8
    Originariamente inviato da Quad
    s.o.s.
    ho come l'impressione che la seconda tabella serva ad una cippa.

    se nella prima tabella hai id, candidato aggiungi una colonna voti ed aggiorni quella.

    metti una colonna voti numerico unsigned default 0

    poi aggiorni il voto:

    update tabella set
    voti = voti + 1
    where candidato = 'ciccio'

    Ovviamente il candidato dovra' essere univoco.

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    26
    Originariamente inviato da piero.mac
    ho come l'impressione che la seconda tabella serva ad una cippa.

    se nella prima tabella hai id, candidato aggiungi una colonna voti ed aggiorni quella.

    metti una colonna voti numerico unsigned default 0

    poi aggiorni il voto:

    update tabella set
    voti = voti + 1
    where candidato = 'ciccio'

    Ovviamente il candidato dovra' essere univoco.
    Ok, grazie per tutte le risposte, modifico ed elimino le tabelle, se ci dovessero essere problemi riscrivo sul presente post.
    Ancora grazie, ciao Alessandro.

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.