Lavoratori e settori

Il problema

  • LAVORATORI(IDlavoratore, cognome, nome, salario, mansione, settoreID)
  • SETTORI(IDsettore, descrizione)

LAVORATORI.settoreID è chiave esterna collegata a SETTORI.IDsettore

Query

  1. TEMP1: totale dei salari per settore
    SELECT   settoreID, Sum(salario) AS [Totale salari]
    FROM     LAVORATORI
    GROUP BY settoreID
  2. TEMP2: salario massimo per settore
    SELECT   settoreID, Max(salario) AS [Salario massimo]
    FROM     LAVORATORI
    GROUP BY settoreID
  3. TEMP3: salario medio per settore
    SELECT   settoreID, Avg(salario) AS [Salario medio]
    FROM     LAVORATORI
    GROUP BY settoreID
  4. Massimo tra le somme dei salari per settore
    SELECT Max([Totale salari])
    FROM   TEMP1
  5. Massimo tra le somme dei salari per settore, senza usare la query TEMP1
    SELECT Max([Totale salari])
    FROM  (SELECT   Sum(salario) AS [Totale salari]
           FROM     LAVORATORI
           GROUP BY settoreID)
  6. Settore, salario massimo, quanti lavoratori con quel salario
    SELECT   TEMP2.settore, TEMP2.[Salario massimo], Count(*) AS [Numero lavoratori]
    FROM     LAVORATORI INNER JOIN TEMP2 ON LAVORATORI.settoreID = TEMP2.settoreID
    WHERE    LAVORATORI.salario = TEMP2.[Salario massimo]
    GROUP BY TEMP2.settoreID, TEMP2.[Salario massimo]
  7. oppure
    SELECT   TEMP2.settore, TEMP2.[Salario massimo], Count(*) AS [Numero lavoratori]
    FROM     LAVORATORI, TEMP2
    WHERE    (LAVORATORI.settoreID = TEMP2.settoreID) AND (LAVORATORI.salario = TEMP2.[Salario massimo])
    GROUP BY TEMP2.settoreID, TEMP2.[Salario massimo]
  8. oppure, senza usare la query TEMP2
    SELECT   TEMP2.settoreID, TEMP2.[Salario massimo], Count(*) AS [Numero lavoratori]
    FROM     LAVORATORI, (SELECT   settoreID, Max(salario) AS [Salario massimo]
                          FROM     LAVORATORI
                          GROUP BY settoreID) AS TEMP2
    WHERE    (LAVORATORI.settoreID = TEMP2.settoreID) AND (LAVORATORI.salario = TEMP2.[Salario massimo])
    GROUP BY TEMP2.settore, TEMP2.[Salario massimo]
  9. I settori con salario medio di almeno 1350 €
    SELECT SETTORI.*, [Salario medio]
    FROM   SETTORI INNER JOIN TEMP3 ON SETTORI.IDsettore = TEMP3.settoreID
    WHERE  [Salario medio] >= 1350
  10. oppure
    SELECT SETTORI.*, [Salario medio]
    FROM   SETTORI INNER JOIN (SELECT   settoreID, Avg(salario) AS [Salario medio]
                               FROM     LAVORATORI
                               GROUP BY settoreID) AS TEMP3
           ON SETTORI.IDsettore = TEMP3.settoreID
    WHERE  [Salario medio] >= 1350