Skip to content

Commit 0ffa421

Browse files
authored
feat: add sql solutions to lc problems (doocs#1197)
1 parent 8f59708 commit 0ffa421

File tree

13 files changed

+156
-98
lines changed

13 files changed

+156
-98
lines changed

.prettierignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ node_modules/
1515
/solution/bash_problem_readme_template_en.md
1616
/solution/0100-0199/0177.Nth Highest Salary/Solution.sql
1717
/solution/0600-0699/0627.Swap Salary/Solution.sql
18-
/solution/1000-1099/1076.Project Employees II/Solution.sql
19-
/solution/1000-1099/1082.Sales Analysis I/Solution.sql
2018
/solution/1100-1199/1173.Immediate Food Delivery I/Solution.sql
2119
/solution/1400-1499/1454.Active Users/Solution.sql
2220
/solution/1400-1499/1484.Group Sold Products By The Date/Solution.sql

solution/1000-1099/1076.Project Employees II/README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,26 +74,29 @@ Result table:
7474

7575
```sql
7676
# Write your MySQL query statement below
77-
SELECT project_id
78-
FROM Project p
79-
GROUP BY project_id
80-
HAVING COUNT(employee_id) >= all(
81-
SELECT COUNT(employee_id)
77+
SELECT project_id
8278
FROM Project
83-
GROUP BY project_id )
79+
GROUP BY 1
80+
HAVING
81+
count(1) >= all(
82+
SELECT count(1)
83+
FROM Project
84+
GROUP BY project_id
85+
);
8486
```
8587

8688
```sql
8789
# Write your MySQL query statement below
88-
SELECT project_id
89-
FROM
90-
(
90+
WITH
91+
T AS (
9192
SELECT
9293
project_id,
93-
dense_rank() OVER (ORDER BY COUNT(employee_id) DESC) AS rk
94+
rank() OVER (ORDER BY count(employee_id) DESC) AS rk
9495
FROM Project
95-
GROUP BY project_id
96-
) AS t
96+
GROUP BY 1
97+
)
98+
SELECT project_id
99+
FROM T
97100
WHERE rk = 1;
98101
```
99102

solution/1000-1099/1076.Project Employees II/README_EN.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,26 +83,29 @@ Employee table:
8383

8484
```sql
8585
# Write your MySQL query statement below
86-
SELECT project_id
87-
FROM Project p
88-
GROUP BY project_id
89-
HAVING COUNT(employee_id) >= all(
90-
SELECT COUNT(employee_id)
86+
SELECT project_id
9187
FROM Project
92-
GROUP BY project_id )
88+
GROUP BY 1
89+
HAVING
90+
count(1) >= all(
91+
SELECT count(1)
92+
FROM Project
93+
GROUP BY project_id
94+
);
9395
```
9496

9597
```sql
9698
# Write your MySQL query statement below
97-
SELECT project_id
98-
FROM
99-
(
99+
WITH
100+
T AS (
100101
SELECT
101102
project_id,
102-
dense_rank() OVER (ORDER BY COUNT(employee_id) DESC) AS rk
103+
rank() OVER (ORDER BY count(employee_id) DESC) AS rk
103104
FROM Project
104-
GROUP BY project_id
105-
) AS t
105+
GROUP BY 1
106+
)
107+
SELECT project_id
108+
FROM T
106109
WHERE rk = 1;
107110
```
108111

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# Write your MySQL query statement below
2-
SELECT project_id
3-
FROM Project p
4-
GROUP BY project_id
5-
HAVING COUNT(employee_id) >= all(
6-
SELECT COUNT(employee_id)
7-
FROM Project
8-
GROUP BY project_id )
2+
WITH
3+
T AS (
4+
SELECT
5+
project_id,
6+
rank() OVER (ORDER BY count(employee_id) DESC) AS rk
7+
FROM Project
8+
GROUP BY 1
9+
)
10+
SELECT project_id
11+
FROM T
12+
WHERE rk = 1;

solution/1000-1099/1077.Project Employees III/README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,31 @@ employee_id 为 1 和 3 的员工在 project_id 为 1 的项目中拥有最丰
7474

7575
<!-- 这里可写通用的实现逻辑 -->
7676

77+
**方法一:内连接 + 窗口函数**
78+
79+
我们先将 `Project` 表和 `Employee` 表进行内连接,然后使用窗口函数 `rank()``Project` 表进行分组,按照 `experience_years` 降序排列,最后取出每个项目中经验最丰富的雇员。
80+
7781
<!-- tabs:start -->
7882

7983
### **SQL**
8084

8185
```sql
8286
# Write your MySQL query statement below
83-
SELECT
84-
project_id,
85-
employee_id
86-
FROM
87-
(
87+
WITH
88+
T AS (
8889
SELECT
89-
p.project_id,
90-
p.employee_id,
90+
project_id,
91+
employee_id,
9192
rank() OVER (
92-
PARTITION BY p.project_id
93-
ORDER BY e.experience_years DESC
93+
PARTITION BY project_id
94+
ORDER BY experience_years DESC
9495
) AS rk
9596
FROM
96-
Project AS p
97-
LEFT JOIN Employee AS e ON p.employee_id = e.employee_id
98-
) AS t
97+
Project
98+
JOIN Employee USING (employee_id)
99+
)
100+
SELECT project_id, employee_id
101+
FROM T
99102
WHERE rk = 1;
100103
```
101104

solution/1000-1099/1077.Project Employees III/README_EN.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,22 +85,21 @@ Employee table:
8585

8686
```sql
8787
# Write your MySQL query statement below
88-
SELECT
89-
project_id,
90-
employee_id
91-
FROM
92-
(
88+
WITH
89+
T AS (
9390
SELECT
94-
p.project_id,
95-
p.employee_id,
91+
project_id,
92+
employee_id,
9693
rank() OVER (
97-
PARTITION BY p.project_id
98-
ORDER BY e.experience_years DESC
94+
PARTITION BY project_id
95+
ORDER BY experience_years DESC
9996
) AS rk
10097
FROM
101-
Project AS p
102-
LEFT JOIN Employee AS e ON p.employee_id = e.employee_id
103-
) AS t
98+
Project
99+
JOIN Employee USING (employee_id)
100+
)
101+
SELECT project_id, employee_id
102+
FROM T
104103
WHERE rk = 1;
105104
```
106105

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
project_id,
4-
employee_id
5-
FROM
6-
(
2+
WITH
3+
T AS (
74
SELECT
8-
p.project_id,
9-
p.employee_id,
5+
project_id,
6+
employee_id,
107
rank() OVER (
11-
PARTITION BY p.project_id
12-
ORDER BY e.experience_years DESC
8+
PARTITION BY project_id
9+
ORDER BY experience_years DESC
1310
) AS rk
1411
FROM
15-
Project AS p
16-
LEFT JOIN Employee AS e ON p.employee_id = e.employee_id
17-
) AS t
12+
Project
13+
JOIN Employee USING (employee_id)
14+
)
15+
SELECT project_id, employee_id
16+
FROM T
1817
WHERE rk = 1;

solution/1000-1099/1082.Sales Analysis I/README.md

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,31 @@ Product 表:
8888

8989
```sql
9090
# Write your MySQL query statement below
91-
SELECT seller_id
91+
SELECT seller_id
9292
FROM Sales
93-
GROUP BY seller_id
94-
HAVING SUM(price) >= ALL (
95-
SELECT SUM(price)
96-
FROM Sales
97-
GROUP BY seller_id )
93+
GROUP BY seller_id
94+
HAVING
95+
SUM(price) >= ALL(
96+
SELECT SUM(price)
97+
FROM Sales
98+
GROUP BY seller_id
99+
);
100+
```
101+
102+
```sql
103+
# Write your MySQL query statement below
104+
WITH
105+
T AS (
106+
SELECT
107+
seller_id,
108+
sum(price) AS tot,
109+
rank() OVER (ORDER BY sum(price) DESC) AS rk
110+
FROM Sales
111+
GROUP BY seller_id
112+
)
113+
SELECT seller_id
114+
FROM T
115+
WHERE rk = 1;
98116
```
99117

100118
<!-- tabs:end -->

solution/1000-1099/1082.Sales Analysis I/README_EN.md

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,31 @@ Sales table:
8484

8585
```sql
8686
# Write your MySQL query statement below
87-
SELECT seller_id
87+
SELECT seller_id
8888
FROM Sales
89-
GROUP BY seller_id
90-
HAVING SUM(price) >= ALL (
91-
SELECT SUM(price)
92-
FROM Sales
93-
GROUP BY seller_id )
89+
GROUP BY seller_id
90+
HAVING
91+
SUM(price) >= ALL(
92+
SELECT SUM(price)
93+
FROM Sales
94+
GROUP BY seller_id
95+
);
96+
```
97+
98+
```sql
99+
# Write your MySQL query statement below
100+
WITH
101+
T AS (
102+
SELECT
103+
seller_id,
104+
sum(price) AS tot,
105+
rank() OVER (ORDER BY sum(price) DESC) AS rk
106+
FROM Sales
107+
GROUP BY seller_id
108+
)
109+
SELECT seller_id
110+
FROM T
111+
WHERE rk = 1;
94112
```
95113

96114
<!-- tabs:end -->
Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
# Write your MySQL query statement below
2-
SELECT seller_id
3-
FROM Sales
4-
GROUP BY seller_id
5-
HAVING SUM(price) >= ALL (
6-
SELECT SUM(price)
7-
FROM Sales
8-
GROUP BY seller_id )
1+
WITH
2+
T AS (
3+
SELECT
4+
seller_id,
5+
sum(price) AS tot,
6+
rank() OVER (ORDER BY sum(price) DESC) AS rk
7+
FROM Sales
8+
GROUP BY seller_id
9+
)
10+
SELECT seller_id
11+
FROM T
12+
WHERE rk = 1;

0 commit comments

Comments
 (0)