Skip to content

Commit be7446c

Browse files
authored
feat: add sql solutions to lc problems (#1228)
* No.1341.Movie Rating * No.1350.Students With Invalid Departments * No.1378.Replace Employee ID With The Unique Identifier * No.1393.Capital GainLoss * No.1398.Customers Who Bought Products A and B but Not C * No.1407.Top Travellers
1 parent ff132bc commit be7446c

File tree

19 files changed

+96
-146
lines changed

19 files changed

+96
-146
lines changed

.prettierrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"solution/1200-1299/1205.Monthly Transactions II/Solution.sql",
2828
"solution/1300-1399/1384.Total Sales Amount by Year/Solution.sql",
2929
"solution/1300-1399/1322.Ads Performance/Solution.sql",
30+
"solution/1300-1399/1393.Capital GainLoss/Solution.sql",
3031
"solution/1300-1399/1398.Customers Who Bought Products A and B but Not C/Solution.sql",
3132
"solution/1400-1499/1479.Sales by Day of the Week/Solution.sql",
3233
"solution/1500-1599/1501.Countries You Can Safely Invest In/Solution.sql",

solution/1300-1399/1341.Movie Rating/README.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,24 +125,22 @@ Frozen 2 和 Joker 在 2 月的评分都是 3.5,但是 Frozen 2 的字典序
125125
```sql
126126
# Write your MySQL query statement below
127127
(
128-
SELECT
129-
name AS results
128+
SELECT name AS results
130129
FROM
131-
MovieRating AS r
132-
LEFT JOIN Users AS u ON u.user_id = r.user_id
133-
GROUP BY r.user_id
130+
Users
131+
JOIN MovieRating USING (user_id)
132+
GROUP BY user_id
134133
ORDER BY count(1) DESC, name
135134
LIMIT 1
136135
)
137136
UNION ALL
138137
(
139-
SELECT
140-
title AS results
138+
SELECT title
141139
FROM
142-
MovieRating AS r
143-
LEFT JOIN Movies AS m ON m.movie_id = r.movie_id
140+
MovieRating
141+
JOIN Movies USING (movie_id)
144142
WHERE date_format(created_at, '%Y-%m') = '2020-02'
145-
GROUP BY m.movie_id
143+
GROUP BY movie_id
146144
ORDER BY avg(rating) DESC, title
147145
LIMIT 1
148146
);

solution/1300-1399/1341.Movie Rating/README_EN.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,24 +117,22 @@ Frozen 2 and Joker have a rating average of 3.5 in February but Frozen 2 is smal
117117
```sql
118118
# Write your MySQL query statement below
119119
(
120-
SELECT
121-
name AS results
120+
SELECT name AS results
122121
FROM
123-
MovieRating AS r
124-
LEFT JOIN Users AS u ON u.user_id = r.user_id
125-
GROUP BY r.user_id
122+
Users
123+
JOIN MovieRating USING (user_id)
124+
GROUP BY user_id
126125
ORDER BY count(1) DESC, name
127126
LIMIT 1
128127
)
129128
UNION ALL
130129
(
131-
SELECT
132-
title AS results
130+
SELECT title
133131
FROM
134-
MovieRating AS r
135-
LEFT JOIN Movies AS m ON m.movie_id = r.movie_id
132+
MovieRating
133+
JOIN Movies USING (movie_id)
136134
WHERE date_format(created_at, '%Y-%m') = '2020-02'
137-
GROUP BY m.movie_id
135+
GROUP BY movie_id
138136
ORDER BY avg(rating) DESC, title
139137
LIMIT 1
140138
);
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
# Write your MySQL query statement below
22
(
3-
SELECT
4-
name AS results
3+
SELECT name AS results
54
FROM
6-
MovieRating AS r
7-
LEFT JOIN Users AS u ON u.user_id = r.user_id
8-
GROUP BY r.user_id
5+
Users
6+
JOIN MovieRating USING (user_id)
7+
GROUP BY user_id
98
ORDER BY count(1) DESC, name
109
LIMIT 1
1110
)
1211
UNION ALL
1312
(
14-
SELECT
15-
title AS results
13+
SELECT title
1614
FROM
17-
MovieRating AS r
18-
LEFT JOIN Movies AS m ON m.movie_id = r.movie_id
15+
MovieRating
16+
JOIN Movies USING (movie_id)
1917
WHERE date_format(created_at, '%Y-%m') = '2020-02'
20-
GROUP BY m.movie_id
18+
GROUP BY movie_id
2119
ORDER BY avg(rating) DESC, title
2220
LIMIT 1
2321
);

solution/1300-1399/1350.Students With Invalid Departments/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,17 +88,17 @@ John, Daiana, Steve 和 Jasmine 所在的院系分别是 14, 33, 74 和 77,
8888

8989
<!-- 这里可写通用的实现逻辑 -->
9090

91-
外连接查询。
91+
**方法一:左连接**
92+
93+
我们将 `Students` 表左连接 `Departments` 表,然后筛选出所有 `Departments` 表中 `id``NULL` 的记录即可。
9294

9395
<!-- tabs:start -->
9496

9597
### **SQL**
9698

9799
```sql
98100
# Write your MySQL query statement below
99-
SELECT
100-
s.id,
101-
s.name
101+
SELECT s.id, s.name
102102
FROM
103103
Students AS s
104104
LEFT JOIN Departments AS d ON s.department_id = d.id

solution/1300-1399/1350.Students With Invalid Departments/README_EN.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,7 @@ John, Daiana, Steve, and Jasmine are enrolled in departments 14, 33, 74, and 77
9090

9191
```sql
9292
# Write your MySQL query statement below
93-
SELECT
94-
s.id,
95-
s.name
93+
SELECT s.id, s.name
9694
FROM
9795
Students AS s
9896
LEFT JOIN Departments AS d ON s.department_id = d.id

solution/1300-1399/1350.Students With Invalid Departments/Solution.sql

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
s.id,
4-
s.name
2+
SELECT s.id, s.name
53
FROM
64
Students AS s
75
LEFT JOIN Departments AS d ON s.department_id = d.id

solution/1300-1399/1378.Replace Employee ID With The Unique Identifier/README.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,20 @@ Jonathan 唯一标识码是 1 。</pre>
8686

8787
<!-- 这里可写通用的实现逻辑 -->
8888

89+
**方法一:LEFT JOIN**
90+
91+
我们可以使用 `LEFT JOIN` 来连接 `Employees``EmployeeUNI` 表,然后使用 `SELECT` 语句来选择 `unique_id``name` 列。
92+
8993
<!-- tabs:start -->
9094

9195
### **SQL**
9296

9397
```sql
9498
# Write your MySQL query statement below
95-
SELECT
96-
b.unique_id AS unique_id,
97-
a.name AS name
99+
SELECT unique_id, name
98100
FROM
99-
Employees AS a
100-
LEFT JOIN EmployeeUNI AS b ON a.id = b.id;
101+
Employees
102+
LEFT JOIN EmployeeUNI USING (id);
101103
```
102104

103105
<!-- tabs:end -->

solution/1300-1399/1378.Replace Employee ID With The Unique Identifier/README_EN.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,10 @@ The unique ID of Jonathan is 1.
8888

8989
```sql
9090
# Write your MySQL query statement below
91-
SELECT
92-
b.unique_id AS unique_id,
93-
a.name AS name
91+
SELECT unique_id, name
9492
FROM
95-
Employees AS a
96-
LEFT JOIN EmployeeUNI AS b ON a.id = b.id;
93+
Employees
94+
LEFT JOIN EmployeeUNI USING (id);
9795
```
9896

9997
<!-- tabs:end -->
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
b.unique_id AS unique_id,
4-
a.name AS name
2+
SELECT unique_id, name
53
FROM
6-
Employees AS a
7-
LEFT JOIN EmployeeUNI AS b ON a.id = b.id;
4+
Employees
5+
LEFT JOIN EmployeeUNI USING (id);

solution/1300-1399/1393.Capital GainLoss/README.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,23 +65,21 @@ Corona Masks 股票在第1天以10美元的价格买入,在第3天以1010美
6565

6666
<!-- 这里可写通用的实现逻辑 -->
6767

68-
`CASE WHEN` + `GROUP BY`
68+
**方法一:GROUP BY + SUM(IF())**
69+
70+
我们使用 `GROUP BY` 将同一支股票的买卖操作分组,然后使用 `SUM(IF())` 计算每支股票的资本损益。
6971

7072
<!-- tabs:start -->
7173

7274
### **SQL**
7375

7476
```sql
77+
# Write your MySQL query statement below
7578
SELECT
7679
stock_name,
77-
SUM(
78-
CASE
79-
WHEN operation = 'Buy' THEN -price
80-
ELSE price
81-
END
82-
) AS capital_gain_loss
80+
sum(if(operation = 'Buy', -price, price)) AS capital_gain_loss
8381
FROM Stocks
84-
GROUP BY stock_name;
82+
GROUP BY 1;
8583
```
8684

8785
<!-- tabs:end -->

solution/1300-1399/1393.Capital GainLoss/README_EN.md

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,12 @@ Corona Masks stock was bought at day 1 for 10$ and was sold at day 3 for 1010$.
7272
### **SQL**
7373

7474
```sql
75+
# Write your MySQL query statement below
7576
SELECT
7677
stock_name,
77-
SUM(
78-
CASE
79-
WHEN operation = 'Buy' THEN -price
80-
ELSE price
81-
END
82-
) AS capital_gain_loss
78+
sum(if(operation = 'Buy', -price, price)) AS capital_gain_loss
8379
FROM Stocks
84-
GROUP BY stock_name;
80+
GROUP BY 1;
8581
```
8682

8783
<!-- tabs:end -->
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1+
# Write your MySQL query statement below
12
SELECT
23
stock_name,
3-
SUM(
4-
CASE
5-
WHEN operation = 'Buy' THEN -price
6-
ELSE price
7-
END
8-
) AS capital_gain_loss
4+
sum(if(operation = 'Buy', -price, price)) AS capital_gain_loss
95
FROM Stocks
10-
GROUP BY stock_name;
6+
GROUP BY 1;

solution/1300-1399/1398.Customers Who Bought Products A and B but Not C/README.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,17 @@ Result table:
8787

8888
```sql
8989
# Write your MySQL query statement below
90-
select
91-
o.customer_id,
92-
c.customer_name
93-
from
94-
orders o
95-
left join customers c on o.customer_id = c.customer_id
96-
group by
97-
customer_id
98-
having
99-
sum(if(product_name = 'A', 1, 0)) > 0
100-
and sum(if(product_name = 'B', 1, 0)) > 0
101-
and sum(if(product_name = 'C', 1, 0)) = 0
90+
SELECT
91+
customer_id,
92+
customer_name
93+
FROM
94+
Orders
95+
JOIN Customers USING (customer_id)
96+
GROUP BY 1
97+
HAVING
98+
sum(product_name = 'A') > 0
99+
AND sum(product_name = 'B') > 0
100+
AND sum(product_name = 'C') = 0;
102101
```
103102

104103
<!-- tabs:end -->

solution/1300-1399/1398.Customers Who Bought Products A and B but Not C/README_EN.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,17 @@ Orders table:
8585

8686
```sql
8787
# Write your MySQL query statement below
88-
select
89-
o.customer_id,
90-
c.customer_name
91-
from
92-
orders o
93-
left join customers c on o.customer_id = c.customer_id
94-
group by
95-
customer_id
96-
having
97-
sum(if(product_name = 'A', 1, 0)) > 0
98-
and sum(if(product_name = 'B', 1, 0)) > 0
99-
and sum(if(product_name = 'C', 1, 0)) = 0
88+
SELECT
89+
customer_id,
90+
customer_name
91+
FROM
92+
Orders
93+
JOIN Customers USING (customer_id)
94+
GROUP BY 1
95+
HAVING
96+
sum(product_name = 'A') > 0
97+
AND sum(product_name = 'B') > 0
98+
AND sum(product_name = 'C') = 0;
10099
```
101100

102101
<!-- tabs:end -->
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Write your MySQL query statement below
22
SELECT
3-
o.customer_id,
4-
c.customer_name
3+
customer_id,
4+
customer_name
55
FROM
6-
orders AS o
7-
LEFT JOIN customers AS c ON o.customer_id = c.customer_id
8-
GROUP BY customer_id
6+
Orders
7+
JOIN Customers USING (customer_id)
8+
GROUP BY 1
99
HAVING
10-
sum(if(product_name = 'A', 1, 0)) > 0
11-
AND sum(if(product_name = 'B', 1, 0)) > 0
12-
AND sum(if(product_name = 'C', 1, 0)) = 0;
10+
sum(product_name = 'A') > 0
11+
AND sum(product_name = 'B') > 0
12+
AND sum(product_name = 'C') = 0;

solution/1400-1499/1407.Top Travellers/README.md

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -96,27 +96,14 @@ Donald 没有任何行程, 他的旅行距离为 0。
9696

9797
### **SQL**
9898

99-
```sql
100-
SELECT
101-
name,
102-
COALESCE(SUM(distance), 0) AS travelled_distance
103-
FROM
104-
Users AS u
105-
LEFT JOIN Rides AS r ON u.id = r.user_id
106-
GROUP BY name
107-
ORDER BY travelled_distance DESC, name;
108-
```
109-
11099
```sql
111100
# Write your MySQL query statement below
112-
SELECT
113-
name,
114-
sum(ifnull(distance, 0)) AS travelled_distance
101+
SELECT name, ifnull(sum(distance), 0) AS travelled_distance
115102
FROM
116103
Users AS u
117104
LEFT JOIN Rides AS r ON u.id = r.user_id
118-
GROUP BY (u.id)
119-
ORDER BY travelled_distance DESC, name ASC;
105+
GROUP BY u.id
106+
ORDER BY 2 DESC, 1;
120107
```
121108

122109
<!-- tabs:end -->

0 commit comments

Comments
 (0)