PDA

View Full Version : QUERY DIFFICILE!!


lucajeck
17-02-2007, 19:30
Ciao a tutti, ho un problema con una query:

Lo schema relazionale č il seguente:

Organizzazione(codice, nome, cittā, data_fondazione) //codice č chiave

Socio(codice, nome, cittā_residenza, data_nascita, data_affiliazione, organizzazione) // codice č chiave

Evento(codice, descrizione, data, organizzazione_ospitante) //codice č chiave

Contatto(codice, modalitā, data, socio_contattante, socio_contattato) //codice

Invito(codice_evento, codice_socio, ruolo) //codice_evento e codice_socio sono chiavi

Si osservi che la relazione Socio contiene informazioni su tutti gli associati, specificando, per ciascuno di essi, l'organizzazione di appartenenza.Inoltre la relazione Invito contiene informazioni sulla partecipazione dei soci agli eventi, specificando anche il ruolo svolto dai soci nelle varie partecipazioni. La relazione Contatto contiene informazioni su tutti i contatti tra soci. Si noti che due soci S1 ed S2, hanno avuto un contatto se S1 ha contattato S2 oppure S2 ha contattato S1. Si osservi inoltre che gli attributi Socio.organizzazione e Evento.organizzazione_ospitante si riferiscono all'attributo Organizzazione.codice, mentre gli attributi Contatto.socio_contattante e Contatto.socio_contatto si riferiscono all'atttributo Socio.codice.

Si chiede di ricavare per ogni organizzazione il numero medio di eventi ospitati in un anno


GRAZIE A TUTTI!

Dr_House
17-02-2007, 21:31
Si chiede di ricavare per ogni organizzazione il numero medio di eventi ospitati in un anno


Organizzazione(codice, nome, cittā, data_fondazione) //codice č chiave


Evento(codice, descrizione, data, organizzazione_ospitante) //codice č chiave

Quando si usa questa forma, la chiave si sottolinea solitamente.. inoltre avresti dovuto indicare le chiavi esterne ovvero Foreign Key.

Deduco che Evento.organizzazione_ospitante sia foreign Key di Organizzazione.codice.

Detto questo, posso risalire al numero di eventi

select count (*), e.data, o.nome
from Evento e JOIN Organizzazione o on (e.organizzazione_ospitante = o.codice)
group by e.data, o.nome
order by e.data, o.nome

Sempre se ho ben inteso il succo della query

Blackat
17-02-2007, 22:41
Mi sa tanto di compito in classe di Database o no ? :mbe: :confused:

lucajeck
18-02-2007, 16:28
Si chiede di ricavare per ogni organizzazione il numero medio di eventi ospitati in un anno


Organizzazione(codice, nome, cittā, data_fondazione) //codice č chiave


Evento(codice, descrizione, data, organizzazione_ospitante) //codice č chiave

Quando si usa questa forma, la chiave si sottolinea solitamente.. inoltre avresti dovuto indicare le chiavi esterne ovvero Foreign Key.

Deduco che Evento.organizzazione_ospitante sia foreign Key di Organizzazione.codice.

Detto questo, posso risalire al numero di eventi

select count (*), e.data, o.nome
from Evento e JOIN Organizzazione o on (e.organizzazione_ospitante = o.codice)
group by e.data, o.nome
order by e.data, o.nome

Sempre se ho ben inteso il succo della query


Be dovrebbe essere simile a questo, ma non chiede i numero di eventi ospitati da una organizzazione, ma il numero medio :) grazie

lucajeck
18-02-2007, 16:30
si esattamente, č un'appello d'esame di basi di dati, dato che sono giā stato bocciato una volta, sto risolvendo tutte le query degli appelli, ma dato che non so se faccio giusto a volte devo rivolgermi ai forum :-)

guldo76
18-02-2007, 20:43
Per fare la media per anno, devi prima contare quanti sono gli eventi per ogni anno, quindi devi fare una subquery.

SELECT o.codice, o.nome, avg(e.numEventiAnno)
FROM Organizzazione AS o
INNER JOIN (
SELECT
organizzazione_ospitante,
year(data),
count(codice) AS numEventiAnno
FROM Eventi
GROUP BY organizzazione_ospitante, year(data)
) AS e
ON o.codice = e.organizzazione_ospitante
GROUP BY o.codice, o.nome