Dunque, sono arrivato rocambolescamente in possesso di un database che può essere interessante per alcune analisi elettorali.
Si tratta sostanzialmente dei risultati elettorali nel Comune di Bologna divisi per seggio.
Il database è un nativo access 2007.
Il mio problema sono gli strumenti, non mi ricordo sufficientemente il linguaggio SQL e non ho abbastanza dimestichezza con access per fare le interrogazioni che vorrei, anche per tirare fuori risultati banali.
Qui la struttura del DB:
Tabella AFFLUENZA
- ID_SEGGIO
- ID_ELEZIONE
- DATA_ELEZIONE
- ELETTORI
- VOTANTI
- VALIDI
Tabella ANAGRAFICA_ELEZIONI
- ID_ELEZIONE
- DESCRIZIONE_ELEZIONE
Tabella ANAGRAFICA_PARTITI
- SIGLA_PARTITO
- NOME_PARTITO
- PARTITO_VALIDO (valore settato a X per i partiti e a blank per i raggruppamenti di schede nulle, bianche, eccetera)
Tabella ANAGRAFICA_QUARTIERI
- ID_QUARTIERE
- NOME_QUARTIERE
Tabella QUARTIERI_SEGGI
- ID_QUARTIERE
- ID_SEGGIO
Tabella RISULTATI
- ID_SEGGIO
- ID_ELEZIONE
- DATA_ELEZIONE
- SIGLA_PARTITO
- VOTI
Ora, le interrogazioni che mi piacerebbe fare, almeno per iniziare, sono le seguenti:
1) Estrarre dalla tabella risultati il valore percentuale ottenuto da un partito in una certa elezione
2) Estrarre dalla tabella risultati e dalla tabella affluenza i seggi che più si avvicinano al valore medio cittadino e di quartiere per elezione
Ringrazio tutti anticipatamente per l'aiuto.
è da più di un anno che non vedo più SQL, però qualche tentativo lo facciamo lo stesso :)
per la query n. 1 la primissima cosa che mi viene in mente è:
SELECT DEC(SUM(VOTI)*100)/ (SELECT SUM(VOTI) FROM RISULTATI WHERE ID_ELEZIONE = [VALORE] ) WHERE ID_ELEZIONE = [VALORE] AND SIGLA_PARTITO = [VALORE]
vedi un pò se funziona, senza fare prove col db davanti è molto meno immediato! Se anche funziona, sicuramente la query è ottimizzabile (ma non credo ti sia necessario ottimizzare)
togliendo l'ultima riga e sostituendola con un GROUP BY (SIGLA_PARTITO) forse forse ottieni la tabella con le percentuali di tutti i partiti in un colpo solo
nella query 2 cosa intendi con "valore medio cittadino" ? il risultato della query 1?
Mastro Architetto dei giochi
Indiscusso Campione dell'errore di battituraù
`·.¸¸.·´´¯`·._.·`Proudly Stark!`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`LaBarriera Fanlover`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`Ned Wannabe`·.¸¸.·´´¯`·._.·`
"O Wind, If Winter comes, can Spring be far behind?"
(P.B.Shelley)
Il problema è che temo Access non mi consenta di mettere annidamenti nello statement select, ma solo in quello where... :(
mmm e se provi ad usare i VOTANTI di AFFLUENZA, unendo questa tabella con RISULTATI ? (credo servirebbe anche un GROUP BY ID_ELEZIONE)
dopo se ho tempo provo a scrivere la query
Mastro Architetto dei giochi
Indiscusso Campione dell'errore di battituraù
`·.¸¸.·´´¯`·._.·`Proudly Stark!`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`LaBarriera Fanlover`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`Ned Wannabe`·.¸¸.·´´¯`·._.·`
"O Wind, If Winter comes, can Spring be far behind?"
(P.B.Shelley)
Ti lovvo. Sallo. :wub:
Usando l'affluenza ce l'ho fatta. ;)
Ora la seconda query. Esatto, vorrei capire quale seggio si avvicina di più ai risultati cittadini, magari applicando il metodo dei minimi quadrati... ma per cominciare anche una semplice differenza può andare.
mi scrivi il testo finale della prima query? :)
Per la seconda, al momento mi vengono solo cose che contemplano annidamenti nel select ^^''
ok :wub:, però glielo dici tu alla Saretta :blush:Ti lovvo. Sallo. :wub:
Mastro Architetto dei giochi
Indiscusso Campione dell'errore di battituraù
`·.¸¸.·´´¯`·._.·`Proudly Stark!`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`LaBarriera Fanlover`·.¸¸.·´´¯`·._.·`
`·.¸¸.·´´¯`·._.·`Ned Wannabe`·.¸¸.·´´¯`·._.·`
"O Wind, If Winter comes, can Spring be far behind?"
(P.B.Shelley)
SELECT An_Elezioni.DESCRIZIONE_E AS Elezione, Risultati.DATA AS Data, An_Partiti.NOME_P AS Partito, Sum(Risultati.VOTI) AS Voti, Sum([Risultati].[VOTI])/Sum([Affluenza].[VALIDI]) AS Percentuale
FROM An_Partiti INNER JOIN (An_Elezioni INNER JOIN (Affluenza INNER JOIN Risultati ON (Affluenza.DATA=Risultati.DATA) AND (Affluenza.ID_E=Risultati.ID_E) AND (Affluenza.ID_S=Risultati.ID_S)) ON An_Elezioni.ID_E=Affluenza.ID_E) ON An_Partiti.SIGLA_P=Risultati.SIGLA_P
WHERE (((An_Partiti.P_VALIDO)=-1))
GROUP BY An_Elezioni.DESCRIZIONE_E, Risultati.DATA, An_Partiti.NOME_P;