Skip to content

Commit 264df17

Browse files
authored
feat: add sql solutions to lc problems (doocs#1195)
* No.0619.Biggest Single Number * No.0620.Not Boring Movies * No.1045.Customers Who Bought All Products * No.1068.Product Sales Analysis I * No.1069.Product Sales Analysis II * No.1070.Product Sales Analysis III * No.1075.Project Employees I
1 parent ec0b8a3 commit 264df17

File tree

26 files changed

+191
-123
lines changed

26 files changed

+191
-123
lines changed

solution/0600-0699/0619.Biggest Single Number/README.md

+17-3
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,28 @@ MyNumbers table:
9696
### **SQL**
9797

9898
```sql
99-
SELECT MAX(a.num) AS num
99+
# Write your MySQL query statement below
100+
SELECT max(num) AS num
100101
FROM
101102
(
102103
SELECT num
103104
FROM MyNumbers
104105
GROUP BY num
105-
HAVING count(*) = 1
106-
) AS a;
106+
HAVING count(1) = 1
107+
) AS t;
108+
```
109+
110+
```sql
111+
# Write your MySQL query statement below
112+
SELECT
113+
CASE
114+
WHEN count(1) = 1 THEN num
115+
ELSE NULL
116+
END AS num
117+
FROM MyNumbers
118+
GROUP BY num
119+
ORDER BY 1 DESC
120+
LIMIT 1;
107121
```
108122

109123
<!-- tabs:end -->

solution/0600-0699/0619.Biggest Single Number/README_EN.md

+17-3
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,28 @@ MyNumbers table:
8484
### **SQL**
8585

8686
```sql
87-
SELECT MAX(a.num) AS num
87+
# Write your MySQL query statement below
88+
SELECT max(num) AS num
8889
FROM
8990
(
9091
SELECT num
9192
FROM MyNumbers
9293
GROUP BY num
93-
HAVING count(*) = 1
94-
) AS a;
94+
HAVING count(1) = 1
95+
) AS t;
96+
```
97+
98+
```sql
99+
# Write your MySQL query statement below
100+
SELECT
101+
CASE
102+
WHEN count(1) = 1 THEN num
103+
ELSE NULL
104+
END AS num
105+
FROM MyNumbers
106+
GROUP BY num
107+
ORDER BY 1 DESC
108+
LIMIT 1;
95109
```
96110

97111
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
SELECT MAX(a.num) AS num
2-
FROM
3-
(
4-
SELECT num
5-
FROM MyNumbers
6-
GROUP BY num
7-
HAVING count(*) = 1
8-
) AS a;
1+
# Write your MySQL query statement below
2+
SELECT
3+
CASE
4+
WHEN count(1) = 1 THEN num
5+
ELSE NULL
6+
END AS num
7+
FROM MyNumbers
8+
GROUP BY num
9+
ORDER BY 1 DESC
10+
LIMIT 1;

solution/0600-0699/0620.Not Boring Movies/README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@
4848
### **SQL**
4949

5050
```sql
51+
# Write your MySQL query statement below
5152
SELECT *
52-
FROM cinema
53-
WHERE description NOT LIKE '%boring%' AND mod(id, 2) = 1
53+
FROM Cinema
54+
WHERE description != 'boring' AND id % 2 = 1
5455
ORDER BY rating DESC;
5556
```
5657

solution/0600-0699/0620.Not Boring Movies/README_EN.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ We have three movies with odd-numbered IDs: 1, 3, and 5. The movie with ID = 3 i
6161
### **SQL**
6262

6363
```sql
64+
# Write your MySQL query statement below
6465
SELECT *
65-
FROM cinema
66-
WHERE description NOT LIKE '%boring%' AND mod(id, 2) = 1
66+
FROM Cinema
67+
WHERE description != 'boring' AND id % 2 = 1
6768
ORDER BY rating DESC;
6869
```
6970

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
# Write your MySQL query statement below
12
SELECT *
2-
FROM cinema
3-
WHERE description NOT LIKE '%boring%' AND mod(id, 2) = 1
3+
FROM Cinema
4+
WHERE description != 'boring' AND id % 2 = 1
45
ORDER BY rating DESC;

solution/0600-0699/0626.Exchange Seats/README.md

+13
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,17 @@ from
103103
seat
104104
```
105105

106+
```sql
107+
# Write your MySQL query statement below
108+
SELECT
109+
CASE
110+
WHEN id & 1 = 0 THEN id - 1
111+
WHEN row_number() OVER (ORDER BY id) != count(id) OVER () THEN id + 1
112+
ELSE id
113+
END AS id,
114+
student
115+
FROM Seat
116+
ORDER BY 1;
117+
```
118+
106119
<!-- tabs:end -->

solution/0600-0699/0626.Exchange Seats/README_EN.md

+13
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,17 @@ from
9999
seat
100100
```
101101

102+
```sql
103+
# Write your MySQL query statement below
104+
SELECT
105+
CASE
106+
WHEN id & 1 = 0 THEN id - 1
107+
WHEN row_number() OVER (ORDER BY id) != count(id) OVER () THEN id + 1
108+
ELSE id
109+
END AS id,
110+
student
111+
FROM Seat
112+
ORDER BY 1;
113+
```
114+
102115
<!-- tabs:end -->

solution/1000-1099/1045.Customers Who Bought All Products/README.md

+7-9
Original file line numberDiff line numberDiff line change
@@ -66,22 +66,20 @@ Result 表:
6666

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

69+
**方法一:GROUP BY + HAVING**
70+
71+
我们将 `Customer` 表按照 `customer_id` 进行分组,然后使用 `HAVING` 子句筛选出购买了所有产品的客户。
72+
6973
<!-- tabs:start -->
7074

7175
### **SQL**
7276

7377
```sql
7478
# Write your MySQL query statement below
75-
SELECT
76-
customer_id
79+
SELECT customer_id
7780
FROM Customer
78-
GROUP BY customer_id
79-
HAVING
80-
COUNT(DISTINCT product_key) = (
81-
SELECT
82-
COUNT(1)
83-
FROM Product
84-
);
81+
GROUP BY 1
82+
HAVING count(DISTINCT product_key) = (SELECT count(1) FROM Product);
8583
```
8684

8785
<!-- tabs:end -->

solution/1000-1099/1045.Customers Who Bought All Products/README_EN.md

+3-9
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,10 @@ The customers who bought all the products (5 and 6) are customers with IDs 1 and
7979

8080
```sql
8181
# Write your MySQL query statement below
82-
SELECT
83-
customer_id
82+
SELECT customer_id
8483
FROM Customer
85-
GROUP BY customer_id
86-
HAVING
87-
COUNT(DISTINCT product_key) = (
88-
SELECT
89-
COUNT(1)
90-
FROM Product
91-
);
84+
GROUP BY 1
85+
HAVING count(DISTINCT product_key) = (SELECT count(1) FROM Product);
9286
```
9387

9488
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
customer_id
2+
SELECT customer_id
43
FROM Customer
5-
GROUP BY customer_id
6-
HAVING
7-
COUNT(DISTINCT product_key) = (
8-
SELECT
9-
COUNT(1)
10-
FROM Product
11-
);
4+
GROUP BY 1
5+
HAVING count(DISTINCT product_key) = (SELECT count(1) FROM Product);

solution/1000-1099/1050.Actors and Directors Who Cooperated At Least Three Times/README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,19 @@ Result 表:
5151

5252
<!-- 这里可写通用的实现逻辑 -->
5353

54-
`GROUP BY` + `HAVING` 解决。
54+
**方法一:使用 `GROUP BY` + `HAVING`**
55+
56+
我们将 `ActorDirector` 表按照 `actor_id``director_id` 进行分组,然后使用 `HAVING` 过滤出合作次数大于等于 $3$ 次的组。
5557

5658
<!-- tabs:start -->
5759

5860
### **SQL**
5961

6062
```sql
61-
SELECT
62-
actor_id,
63-
director_id
63+
# Write your MySQL query statement below
64+
SELECT actor_id, director_id
6465
FROM ActorDirector
65-
GROUP BY actor_id, director_id
66+
GROUP BY 1, 2
6667
HAVING count(1) >= 3;
6768
```
6869

solution/1000-1099/1050.Actors and Directors Who Cooperated At Least Three Times/README_EN.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,10 @@ Use `GROUP BY` & `HAVING`.
6060
### **SQL**
6161

6262
```sql
63-
SELECT
64-
actor_id,
65-
director_id
63+
# Write your MySQL query statement below
64+
SELECT actor_id, director_id
6665
FROM ActorDirector
67-
GROUP BY actor_id, director_id
66+
GROUP BY 1, 2
6867
HAVING count(1) >= 3;
6968
```
7069

Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
SELECT
2-
actor_id,
3-
director_id
1+
# Write your MySQL query statement below
2+
SELECT actor_id, director_id
43
FROM ActorDirector
5-
GROUP BY actor_id, director_id
4+
GROUP BY 1, 2
65
HAVING count(1) >= 3;

solution/1000-1099/1068.Product Sales Analysis I/README.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -78,19 +78,20 @@ Result 表:
7878

7979
<!-- 这里可写通用的实现逻辑 -->
8080

81+
**方法一:使用 `JOIN` 内连接**
82+
83+
我们直接使用 `JOIN` 连接 `Sales``Product` 两张表,连接字段为 `product_id`,然后选择需要的字段即可。
84+
8185
<!-- tabs:start -->
8286

8387
### **SQL**
8488

8589
```sql
8690
# Write your MySQL query statement below
87-
SELECT
88-
p.product_name AS product_name,
89-
s.year AS year,
90-
s.price AS price
91+
SELECT product_name, year, price
9192
FROM
92-
Sales AS s
93-
LEFT JOIN Product AS p ON s.product_id = p.product_id;
93+
Sales
94+
JOIN Product USING (product_id);
9495
```
9596

9697
<!-- tabs:end -->

solution/1000-1099/1068.Product Sales Analysis I/README_EN.md

+3-6
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,10 @@ From sale_id = 7, we can conclude that Apple was sold for 9000 in the year 2011.
8888

8989
```sql
9090
# Write your MySQL query statement below
91-
SELECT
92-
p.product_name AS product_name,
93-
s.year AS year,
94-
s.price AS price
91+
SELECT product_name, year, price
9592
FROM
96-
Sales AS s
97-
LEFT JOIN Product AS p ON s.product_id = p.product_id;
93+
Sales
94+
JOIN Product USING (product_id);
9895
```
9996

10097
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
p.product_name AS product_name,
4-
s.year AS year,
5-
s.price AS price
2+
SELECT product_name, year, price
63
FROM
7-
Sales AS s
8-
LEFT JOIN Product AS p ON s.product_id = p.product_id;
4+
Sales
5+
JOIN Product USING (product_id);

solution/1000-1099/1069.Product Sales Analysis II/README.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,19 @@ Result 表:
7171

7272
<!-- 这里可写通用的实现逻辑 -->
7373

74+
**方法一:使用 `GROUP BY`**
75+
76+
我们可以使用 `GROUP BY`,按照 `product_id` 分组,然后每一组对 `quantity` 求和。
77+
7478
<!-- tabs:start -->
7579

7680
### **SQL**
7781

7882
```sql
7983
# Write your MySQL query statement below
80-
SELECT
81-
product_id,
82-
sum(quantity) AS total_quantity
84+
SELECT product_id, sum(quantity) AS total_quantity
8385
FROM Sales
84-
GROUP BY product_id;
86+
GROUP BY 1;
8587
```
8688

8789
<!-- tabs:end -->

solution/1000-1099/1069.Product Sales Analysis II/README_EN.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,9 @@ Product table:
8383

8484
```sql
8585
# Write your MySQL query statement below
86-
SELECT
87-
product_id,
88-
sum(quantity) AS total_quantity
86+
SELECT product_id, sum(quantity) AS total_quantity
8987
FROM Sales
90-
GROUP BY product_id;
88+
GROUP BY 1;
9189
```
9290

9391
<!-- tabs:end -->
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
# Write your MySQL query statement below
2-
SELECT
3-
product_id,
4-
sum(quantity) AS total_quantity
2+
SELECT product_id, sum(quantity) AS total_quantity
53
FROM Sales
6-
GROUP BY product_id;
4+
GROUP BY 1;

solution/1000-1099/1070.Product Sales Analysis III/README.md

+17
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,21 @@ WHERE
102102
);
103103
```
104104

105+
```sql
106+
# Write your MySQL query statement below
107+
WITH
108+
T AS (
109+
SELECT
110+
*,
111+
rank() OVER (
112+
PARTITION BY product_id
113+
ORDER BY year
114+
) AS rk
115+
FROM Sales
116+
)
117+
SELECT product_id, year AS first_year, quantity, price
118+
FROM T
119+
WHERE rk = 1;
120+
```
121+
105122
<!-- tabs:end -->

0 commit comments

Comments
 (0)