Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f67f6c0

Browse files
feat: update sql solution to lc problem: No.0615,0618 (doocs#1193)
* No.0615.Average Salary Departments VS Company * No.0618.Students Report By Geography
1 parent 5cc5678 commit f67f6c0

File tree

6 files changed

+121
-56
lines changed

6 files changed

+121
-56
lines changed

‎solution/0600-0699/0615.Average Salary Departments VS Company/README.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,35 @@ SELECT DISTINCT
105105
FROM t;
106106
```
107107

108+
```sql
109+
# Write your MySQL query statement below
110+
WITH
111+
S AS (
112+
SELECT *
113+
FROM
114+
Salary
115+
JOIN Employee USING (employee_id)
116+
),
117+
T AS (
118+
SELECT
119+
date_format(pay_date, '%Y-%m') AS pay_month,
120+
department_id,
121+
avg(amount) OVER (
122+
PARTITION BY pay_date, department_id
123+
) AS department_avg,
124+
avg(amount) OVER (PARTITION BY pay_date) AS company_avg
125+
FROM S
126+
)
127+
SELECT
128+
pay_month,
129+
department_id,
130+
CASE
131+
WHEN avg(department_avg) > avg(company_avg) THEN 'higher'
132+
WHEN avg(department_avg) < avg(company_avg) THEN 'lower'
133+
ELSE 'same'
134+
END AS comparison
135+
FROM T
136+
GROUP BY 1, 2;
137+
```
138+
108139
<!-- tabs:end -->

‎solution/0600-0699/0615.Average Salary Departments VS Company/README_EN.md‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,35 @@ SELECT DISTINCT
116116
FROM t;
117117
```
118118

119+
```sql
120+
# Write your MySQL query statement below
121+
WITH
122+
S AS (
123+
SELECT *
124+
FROM
125+
Salary
126+
JOIN Employee USING (employee_id)
127+
),
128+
T AS (
129+
SELECT
130+
date_format(pay_date, '%Y-%m') AS pay_month,
131+
department_id,
132+
avg(amount) OVER (
133+
PARTITION BY pay_date, department_id
134+
) AS department_avg,
135+
avg(amount) OVER (PARTITION BY pay_date) AS company_avg
136+
FROM S
137+
)
138+
SELECT
139+
pay_month,
140+
department_id,
141+
CASE
142+
WHEN avg(department_avg) > avg(company_avg) THEN 'higher'
143+
WHEN avg(department_avg) < avg(company_avg) THEN 'lower'
144+
ELSE 'same'
145+
END AS comparison
146+
FROM T
147+
GROUP BY 1, 2;
148+
```
149+
119150
<!-- tabs:end -->
Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
# Write your MySQL query statement below
22
WITH
3-
t AS (
3+
S AS (
4+
SELECT *
5+
FROM
6+
Salary
7+
JOIN Employee USING (employee_id)
8+
),
9+
T AS (
410
SELECT
511
date_format(pay_date, '%Y-%m') AS pay_month,
612
department_id,
7-
avg(amount) OVER (PARTITION BY pay_date) AS company_avg_amount,
813
avg(amount) OVER (
914
PARTITION BY pay_date, department_id
10-
) AS department_avg_amount
11-
FROM
12-
Salary AS s
13-
JOIN Employee AS e ON s.employee_id = e.employee_id
15+
) AS department_avg,
16+
avg(amount) OVER (PARTITION BY pay_date) AS company_avg
17+
FROM S
1418
)
15-
SELECT DISTINCT
19+
SELECT
1620
pay_month,
1721
department_id,
1822
CASE
19-
WHEN company_avg_amount = department_avg_amount THEN 'same'
20-
WHEN company_avg_amount < department_avg_amount THEN 'higher'
21-
ELSE 'lower'
23+
WHEN avg(department_avg) >avg(company_avg) THEN 'higher'
24+
WHEN avg(department_avg) < avg(company_avg) THEN 'lower'
25+
ELSE 'same'
2226
END AS comparison
23-
FROM t;
27+
FROM T
28+
GROUP BY 1, 2;

‎solution/0600-0699/0618.Students Report By Geography/README.md‎

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,31 +60,32 @@ Student table:
6060

6161
<!-- 这里可写通用的实现逻辑 -->
6262

63+
**方法一:窗口函数 + GROUP BY**
64+
65+
我们可以使用窗口函数 `row_number()` 来为每个大洲的学生编号,然后使用 `GROUP BY` 来将同一编号的学生聚合到一行中。
66+
6367
<!-- tabs:start -->
6468

6569
### **SQL**
6670

6771
```sql
6872
# Write your MySQL query statement below
69-
with t as (
70-
select
71-
*,
72-
row_number() over(
73-
partition by continent
74-
order by
75-
name
76-
) rn
77-
from
78-
Student
79-
)
80-
select
81-
max(if(continent = 'America', name, null)) America,
82-
max(if(continent = 'Asia', name, null)) Asia,
83-
max(if(continent = 'Europe', name, null)) Europe
84-
from
85-
t
86-
group by
87-
rn
73+
WITH
74+
T AS (
75+
SELECT
76+
*,
77+
row_number() OVER (
78+
PARTITION BY continent
79+
ORDER BY name
80+
) AS rk
81+
FROM Student
82+
)
83+
SELECT
84+
max(if(continent = 'America', name, NULL)) AS 'America',
85+
max(if(continent = 'Asia', name, NULL)) AS 'Asia',
86+
max(if(continent = 'Europe', name, NULL)) AS 'Europe'
87+
FROM T
88+
GROUP BY rk;
8889
```
8990

9091
<!-- tabs:end -->

‎solution/0600-0699/0618.Students Report By Geography/README_EN.md‎

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,22 @@ Student table:
6161

6262
```sql
6363
# Write your MySQL query statement below
64-
with t as (
65-
select
66-
*,
67-
row_number() over(
68-
partition by continent
69-
order by
70-
name
71-
) rn
72-
from
73-
Student
74-
)
75-
select
76-
max(if(continent = 'America', name, null)) America,
77-
max(if(continent = 'Asia', name, null)) Asia,
78-
max(if(continent = 'Europe', name, null)) Europe
79-
from
80-
t
81-
group by
82-
rn
64+
WITH
65+
T AS (
66+
SELECT
67+
*,
68+
row_number() OVER (
69+
PARTITION BY continent
70+
ORDER BY name
71+
) AS rk
72+
FROM Student
73+
)
74+
SELECT
75+
max(if(continent = 'America', name, NULL)) AS 'America',
76+
max(if(continent = 'Asia', name, NULL)) AS 'Asia',
77+
max(if(continent = 'Europe', name, NULL)) AS 'Europe'
78+
FROM T
79+
GROUP BY rk;
8380
```
8481

8582
<!-- tabs:end -->
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
# Write your MySQL query statement below
22
WITH
3-
t AS (
3+
T AS (
44
SELECT
55
*,
66
row_number() OVER (
77
PARTITION BY continent
88
ORDER BY name
9-
) AS rn
9+
) AS rk
1010
FROM Student
1111
)
1212
SELECT
13-
max(if(continent = 'America', name, NULL)) AS America,
14-
max(if(continent = 'Asia', name, NULL)) AS Asia,
15-
max(if(continent = 'Europe', name, NULL)) AS Europe
16-
FROM t
17-
GROUP BY rn;
13+
max(if(continent = 'America', name, NULL)) AS 'America',
14+
max(if(continent = 'Asia', name, NULL)) AS 'Asia',
15+
max(if(continent = 'Europe', name, NULL)) AS 'Europe'
16+
FROM T
17+
GROUP BY rk;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /