/* INTERROGAZIONI CON FUNZIONI AGGREGATE ED OPERATORI DI AGGREGAZIONE */ /* ----------------------------------------------------------------- Chi sono i Mario? ----------------------------------------------------------------- */ SELECT Nome, Cognome FROM Impiegato WHERE Impiegato.Nome = 'Mario'; /* ----------------------------------------------------------------- Quanti Mario ci sono? ----------------------------------------------------------------- */ SELECT COUNT(*) FROM Impiegato WHERE Nome='Mario'; /* ----------------------------------------------------------------- Stipendio degli impiegati di nome 'Mario'? ----------------------------------------------------------------- */ SELECT Stipendio FROM Impiegato WHERE Impiegato.Nome = 'Mario'; /* ----------------------------------------------------------------- Quante fasce di stipendio ci sono per coloro che si chiamano Mario? ----------------------------------------------------------------- */ SELECT COUNT(DISTINCT Stipendio) FROM Impiegato WHERE Nome='Mario'; /* ----------------------------------------------------------------- Conteggio degli elementi di un multinsieme. ----------------------------------------------------------------- */ SELECT COUNT(ALL Stipendio) FROM Impiegato WHERE Nome='Mario'; /* ------ Equivalente alla precedente. */ SELECT COUNT(Stipendio) FROM Impiegato WHERE Nome='Mario'; /* ----------------------------------------------------------------- Somma degli stipendi dei Mario ----------------------------------------------------------------- */ SELECT SUM(Stipendio) FROM Impiegato WHERE Nome='Mario'; /* ----------------------------------------------------------------- Stipendio minimo, medio e massimo dei Mario ----------------------------------------------------------------- */ SELECT MIN(Stipendio) AS Minimo, AVG(Stipendio) AS Medio, MAX(Stipendio) AS Massimo FROM Impiegato WHERE Nome='Mario'; /* ----------------------------------------------------------------- Somma degli stipendi degli impiegati dello stesso dipartimento, indipendentemente dalla sede? ----------------------------------------------------------------- */ /* ------ I approssimazione. */ SELECT DipNome, Stipendio FROM Impiegato; /* ------ II approssimazione. */ SELECT DipNome, Stipendio FROM Impiegato ORDER BY DipNome; /* ------ Soluzione. */ SELECT DipNome, SUM(Stipendio) FROM Impiegato GROUP BY DipNome; /* ----------------------------------------------------------------- Numero di impiegati per dipartimento in ogni sede ----------------------------------------------------------------- */ /* ------ I approssimazione. */ SELECT DipSede, DipNome FROM Impiegato; /* ------ II approssimazione. */ SELECT DipSede, DipNome FROM Impiegato ORDER BY DipSede, DipNome; /* ------ Soluzione. */ SELECT DipSede, DipNome, Count(*) FROM Impiegato GROUP BY DipSede, DipNome; /* ----------------------------------------------------------------- Dipartimenti che spendono pił di 200 milioni in stipendi ----------------------------------------------------------------- */ /* ------ I approssimazione. */ SELECT DipNome, Stipendio FROM Impiegato ; /* ------ II approssimazione. */ SELECT DipNome, Stipendio FROM Impiegato ORDER BY DipNome ; /* ------ Soluzione. */ SELECT DipNome, SUM(Stipendio) FROM Impiegato GROUP BY DipNome; /* ------ Soluzione. */ SELECT DipNome, SUM(Stipendio) FROM Impiegato GROUP BY DipNome HAVING SUM(Stipendio) > 200; /* INTERROGAZIONI ANNIDATE */ /* ----------------------------------------------------------------- Matricole degli impieagati che lavorano a piu` di due progetti. ----------------------------------------------------------------- */ SELECT Impiegato FROM Partecipazione GROUP BY Impiegato HAVING COUNT(*) > 2; /* ----------------------------------------------------------------- Cognomi degli impieagati che lavorano a piu` di due progetti. ----------------------------------------------------------------- */ SELECT I.Cognome FROM Impiegato I JOIN Partecipazione P ON P.Impiegato = I.Matricola GROUP BY I.Cognome HAVING COUNT(*) > 2; /* ------ Equivalente */ SELECT I.Cognome FROM Impiegato I WHERE (SELECT Count(*) FROM Partecipazione P WHERE P.Impiegato = I.Matricola ) > 2; /* ------ COME FUNZIONA? */ SELECT Matricola FROM Impiegato; SELECT * FROM Partecipazione; SELECT Count(*) FROM Partecipazione P WHERE P.Impiegato = '101'; SELECT Count(*) FROM Partecipazione P WHERE P.Impiegato = '103'; SELECT Count(*) FROM Partecipazione P WHERE P.Impiegato = '375'; /* .................... */ SELECT Count(*) FROM Partecipazione P WHERE P.Impiegato = '030'; SELECT I.Cognome FROM Impiegato I WHERE I.Matricola = '030';