diff --git a/build.gradle b/build.gradle index 68a83f90b..73ef36512 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ repositories { dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:[5.12.2,)' testImplementation 'org.hamcrest:hamcrest-core:[3.0,)' - testImplementation 'org.zapodot:embedded-db-junit-jupiter:2.2.0' + testImplementation 'org.zapodot:embedded-db-junit-jupiter:2.2.2' testRuntimeOnly 'org.junit.platform:junit-platform-launcher:[1.12.2,)' } diff --git a/pom-central.xml b/pom-central.xml index d6d508779..14589c8a1 100644 --- a/pom-central.xml +++ b/pom-central.xml @@ -167,7 +167,7 @@ org.zapodot embedded-db-junit-jupiter - 2.2.0 + 2.2.2 test diff --git a/pom-central21.xml b/pom-central21.xml index d3ab00ca6..b863008eb 100644 --- a/pom-central21.xml +++ b/pom-central21.xml @@ -173,7 +173,7 @@ org.zapodot embedded-db-junit-jupiter - 2.2.0 + 2.2.2 test diff --git a/pom.xml b/pom.xml index 86d410f7d..8567e0b15 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.zapodot embedded-db-junit-jupiter - 2.2.0 + 2.2.2 test diff --git a/src/main/java/g3401_3500/s3482_analyze_organization_hierarchy/script.sql b/src/main/java/g3401_3500/s3482_analyze_organization_hierarchy/script.sql index 7503ec213..3e1ea4668 100644 --- a/src/main/java/g3401_3500/s3482_analyze_organization_hierarchy/script.sql +++ b/src/main/java/g3401_3500/s3482_analyze_organization_hierarchy/script.sql @@ -1,43 +1,62 @@ # Write your MySQL query statement below -# #Hard #Database #2025_03_11_Time_712_ms_(100.00%)_Space_0.0_MB_(100.00%) -with recursive org_hierarchy(orig_employee_id, orig_employee_name, employee_id, employee_name, manager_id, salary, org_level) as -( - select employee_id as orig_employee_id, - employee_name as orig_employee_name, +# #Hard #Database #2025_05_30_Time_294_ms_(80.03%)_Space_0.0_MB_(100.00%) +WITH RECURSIVE org_hierarchy ( + orig_employee_id, + orig_employee_name, employee_id, employee_name, manager_id, salary, - 1 as org_level - from Employees + org_level +) AS ( + SELECT + employee_id AS orig_employee_id, + employee_name AS orig_employee_name, + employee_id, + employee_name, + manager_id, + salary, + 1 AS org_level + FROM Employees + UNION ALL - select P.orig_employee_id, - P.orig_employee_name, - CH.employee_id, - CH.employee_name, - CH.manager_id, - CH.salary, - P.org_level + 1 - from org_hierarchy P, Employees CH - where ch.manager_id = P.employee_id + + SELECT + P.orig_employee_id, + P.orig_employee_name, + CH.employee_id, + CH.employee_name, + CH.manager_id, + CH.salary, + P.org_level + 1 + FROM org_hierarchy P + JOIN Employees CH ON CH.manager_id = P.employee_id ), -CEO_hierarchy as ( - select org_hierarchy.employee_id as SUB_employee_id, - org_hierarchy.employee_name, - org_hierarchy.org_level as sub_level - from org_hierarchy, Employees - where org_hierarchy.orig_employee_id = Employees.employee_id - and Employees.manager_id is null +CEO_hierarchy ( + sub_employee_id, + employee_name, + sub_level +) AS ( + SELECT + oh.employee_id AS sub_employee_id, + oh.employee_name, + oh.org_level AS sub_level + FROM org_hierarchy oh + JOIN Employees e ON oh.orig_employee_id = e.employee_id + WHERE e.manager_id IS NULL ) -select -org_hierarchy.ORIG_EMPLOYEE_ID as employee_id, -org_hierarchy.ORIG_EMPLOYEE_name as employee_name, -CEO_hierarchy.sub_level as "level", -count(*) - 1 as team_size, -sum(org_hierarchy.salary) as budget -from org_hierarchy, CEO_hierarchy -where org_hierarchy.ORIG_EMPLOYEE_ID = CEO_hierarchy.SUB_employee_id -group by org_hierarchy.ORIG_EMPLOYEE_ID, -org_hierarchy.ORIG_EMPLOYEE_name, -CEO_hierarchy.sub_level -order by 3 asc, 5 desc, 2 + +SELECT + oh.orig_employee_id AS employee_id, + oh.orig_employee_name AS employee_name, + ch.sub_level AS level, + COUNT(*) - 1 AS team_size, + SUM(oh.salary) AS budget +FROM org_hierarchy oh +JOIN CEO_hierarchy ch ON oh.orig_employee_id = ch.sub_employee_id +GROUP BY + oh.orig_employee_id, + oh.orig_employee_name, + ch.sub_level +ORDER BY + level ASC, budget DESC, employee_name ASC;