https://www.youtube.com/watch?v=yOp-8QGSUMM
DROP TABLE IF EXISTS Employees;
CREATE TABLE Employees
(
EmployeeID INTEGER,
License VARCHAR(100)
);
INSERT INTO Employees (EmployeeID, License) VALUES
(1,'Class A'),(1,'Class B'),(1,'Class C'),
(2,'Class A'),(2,'Class B'),(2,'Class C'),
(3,'Class A'),(3,'Class D'),
(4,'Class A'),(4,'Class B'),(4,'Class D'),
(5,'Class A'),(5,'Class B'),(5,'Class D');
SELECT * FROM Employees
WITH CTE AS(
SELECT
EMPLOYEEID,
COUNT(1) as ecnt
FROM employees
group by employeeid
)
,cte2 as (
SELECT
e.employeeid as employeeid,
e1.employeeid as employee_id,
COUNT(*) as cnt,
c1.ecnt as cnt1,
c2.ecnt as cnt2
FROM Employees e left join employees e1 on e.license = e1.license and e.employeeID != e1.employeeid
JOIN cte c1 on c1.employeeid = e.employeeid
JOIN cte c2 on c2.employeeid = e1.employeeid
GROUP BY e.employeeid,e1.employeeid,cnt1,cnt2
HAVING cnt = cnt1 and cnt = cnt2
)
select
employeeid as `Employee id`, employee_id as `Employee id`,cnt as count
FROM cte2