Jump to content

Archived

This topic is now archived and is closed to further replies.

Lord Beric

Help interrogazione db

Recommended Posts

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.

Share this post


Link to post
Share on other sites

è 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?

Share this post


Link to post
Share on other sites

Il problema è che temo Access non mi consenta di mettere annidamenti nello statement select, ma solo in quello where... :(

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

mi scrivi il testo finale della prima query? :)

 

Per la seconda, al momento mi vengono solo cose che contemplano annidamenti nel select ^^''

 

 

 

Ti lovvo. Sallo. :wub:

 

ok :wub:, però glielo dici tu alla Saretta :blush:

Share this post


Link to post
Share on other sites

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;

Share this post


Link to post
Share on other sites

×
×
  • Create New...