File tree Expand file tree Collapse file tree 13 files changed +156
-98
lines changed
1076.Project Employees II
1077.Project Employees III
2500-2599/2544.Alternating Digit Sum Expand file tree Collapse file tree 13 files changed +156
-98
lines changed Original file line number Diff line number Diff line change @@ -15,8 +15,6 @@ node_modules/
15
15
/solution /bash_problem_readme_template_en.md
16
16
/solution /0100-0199 /0177.Nth Highest Salary /Solution.sql
17
17
/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
20
18
/solution /1100-1199 /1173.Immediate Food Delivery I /Solution.sql
21
19
/solution /1400-1499 /1454.Active Users /Solution.sql
22
20
/solution /1400-1499 /1484.Group Sold Products By The Date /Solution.sql
Original file line number Diff line number Diff line change @@ -74,26 +74,29 @@ Result table:
74
74
75
75
``` sql
76
76
# 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
82
78
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
+ );
84
86
```
85
87
86
88
``` sql
87
89
# Write your MySQL query statement below
88
- SELECT project_id
89
- FROM
90
- (
90
+ WITH
91
+ T AS (
91
92
SELECT
92
93
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
94
95
FROM Project
95
- GROUP BY project_id
96
- ) AS t
96
+ GROUP BY 1
97
+ )
98
+ SELECT project_id
99
+ FROM T
97
100
WHERE rk = 1 ;
98
101
```
99
102
Original file line number Diff line number Diff line change @@ -83,26 +83,29 @@ Employee table:
83
83
84
84
``` sql
85
85
# 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
91
87
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
+ );
93
95
```
94
96
95
97
``` sql
96
98
# Write your MySQL query statement below
97
- SELECT project_id
98
- FROM
99
- (
99
+ WITH
100
+ T AS (
100
101
SELECT
101
102
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
103
104
FROM Project
104
- GROUP BY project_id
105
- ) AS t
105
+ GROUP BY 1
106
+ )
107
+ SELECT project_id
108
+ FROM T
106
109
WHERE rk = 1 ;
107
110
```
108
111
Original file line number Diff line number Diff line change 1
1
# 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 ;
Original file line number Diff line number Diff line change @@ -74,28 +74,31 @@ employee_id 为 1 和 3 的员工在 project_id 为 1 的项目中拥有最丰
74
74
75
75
<!-- 这里可写通用的实现逻辑 -->
76
76
77
+ ** 方法一:内连接 + 窗口函数**
78
+
79
+ 我们先将 ` Project ` 表和 ` Employee ` 表进行内连接,然后使用窗口函数 ` rank() ` 对 ` Project ` 表进行分组,按照 ` experience_years ` 降序排列,最后取出每个项目中经验最丰富的雇员。
80
+
77
81
<!-- tabs:start -->
78
82
79
83
### ** SQL**
80
84
81
85
``` sql
82
86
# Write your MySQL query statement below
83
- SELECT
84
- project_id,
85
- employee_id
86
- FROM
87
- (
87
+ WITH
88
+ T AS (
88
89
SELECT
89
- p . project_id ,
90
- p . employee_id ,
90
+ project_id,
91
+ employee_id,
91
92
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
94
95
) AS rk
95
96
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
99
102
WHERE rk = 1 ;
100
103
```
101
104
Original file line number Diff line number Diff line change @@ -85,22 +85,21 @@ Employee table:
85
85
86
86
``` sql
87
87
# Write your MySQL query statement below
88
- SELECT
89
- project_id,
90
- employee_id
91
- FROM
92
- (
88
+ WITH
89
+ T AS (
93
90
SELECT
94
- p . project_id ,
95
- p . employee_id ,
91
+ project_id,
92
+ employee_id,
96
93
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
99
96
) AS rk
100
97
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
104
103
WHERE rk = 1 ;
105
104
```
106
105
Original file line number Diff line number Diff line change 1
1
# Write your MySQL query statement below
2
- SELECT
3
- project_id,
4
- employee_id
5
- FROM
6
- (
2
+ WITH
3
+ T AS (
7
4
SELECT
8
- p . project_id ,
9
- p . employee_id ,
5
+ project_id,
6
+ employee_id,
10
7
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
13
10
) AS rk
14
11
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
18
17
WHERE rk = 1 ;
Original file line number Diff line number Diff line change @@ -88,13 +88,31 @@ Product 表:
88
88
89
89
``` sql
90
90
# Write your MySQL query statement below
91
- SELECT seller_id
91
+ SELECT seller_id
92
92
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 ;
98
116
```
99
117
100
118
<!-- tabs:end -->
Original file line number Diff line number Diff line change @@ -84,13 +84,31 @@ Sales table:
84
84
85
85
``` sql
86
86
# Write your MySQL query statement below
87
- SELECT seller_id
87
+ SELECT seller_id
88
88
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 ;
94
112
```
95
113
96
114
<!-- tabs:end -->
Original file line number Diff line number Diff line change 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 ;
You can’t perform that action at this time.
0 commit comments