Oggi vediamo il seguente esercizio di LeetCode a tema SQL:

Write a solution to find managers with at least five direct reports.

Return the result table in any order.

Guardando le tabelle fornite dall’esercizio si può notare che la tabella Employee contiene sia i dipendenti che i manager, e il campo managerId indica a quale manager ogni dipendente riporta.

L’obiettivo è quindi individuare i manager che hanno almeno 5 dipendenti diretti (direct reports).

Per farlo:

  • nella sottoquery (E2) raggruppiamo i record per managerId
  • contiamo quanti dipendenti ha ciascun manager (COUNT(*))
  • filtriamo solo quelli con almeno 5 (HAVING COUNT(*) >= 5)
  • infine facciamo una JOIN con la tabella Employee per ottenere il nome del manager

Detto ciò, la soluzione che proponiamo noi è la seguente:

SELECT E1.name
FROM Employee E1
JOIN (
    SELECT managerId, COUNT(*) AS directReports
    FROM Employee
    GROUP BY managerId
    HAVING COUNT(*) >= 5
) E2 ON E1.id = E2.managerId;

Se hai dubbi in merito non esitare a contattarci sui nostri social, saremo più che felici di risponderti :)