Dato lo schema:
UTENTE(Codice, Nome, Cognome, Età)
TEATRO(Nome, Città, Capienza)
ABBONAMENTO(ID, CodUtente, NomeTeatro, Costo)
Con vincoli di integrità referenziale:
ABBONAMENTO.CodUtente->UTENTE.Codice
ABBONAMENTO.NomeTeatro->TEATRO.Nome
Scrivere in SQL la query che determina: la città con maggior numero di abbonamenti sottoscritti da utenti con fascia d'età compresa tra i 18 ed i 25 anni.
[VINCOLO: Non è possibile utilizzare il costrutto HAVING]
Mi sto scontrando con questa query da ieri pomeriggio.
L'unica cosa chiara è che mi servono tutte e 3 le tabelle e che non penso di poter risolvere con un'unica select, sia pure con annidamenti. Forse qui torna utile una vista? Da utente mi serve l'età, da teatro la città, da abbonamento il numero di sottoscrizioni, dopodiché devo trovare il massimo valore. Con questa query mi trovo i teatri e le rispettive città raggruppati per numero di abbonamenti:
select nometeatro, citta, count(*) as nr
from teatro join abbonamento on (nome=nometeatro)
group by nometeatro;
Ma non sono nemmeno sicura che mi sia utile
Mi aiutereste, senza però darmi la soluzione? Vorrei sapere che ragionamenti fate quando componente query così complesse. Grazie!


Rispondi quotando