diff --git a/.prettierignore b/.prettierignore index ea62a4d14aa91..dca76cf93a782 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,8 +15,6 @@ node_modules/ /solution/bash_problem_readme_template_en.md /solution/0100-0199/0177.Nth Highest Salary/Solution.sql /solution/0600-0699/0627.Swap Salary/Solution.sql -/solution/1000-1099/1076.Project Employees II/Solution.sql -/solution/1000-1099/1082.Sales Analysis I/Solution.sql /solution/1100-1199/1173.Immediate Food Delivery I/Solution.sql /solution/1400-1499/1454.Active Users/Solution.sql /solution/1400-1499/1484.Group Sold Products By The Date/Solution.sql diff --git a/solution/1000-1099/1076.Project Employees II/README.md b/solution/1000-1099/1076.Project Employees II/README.md index ea9b8c04858a7..e3a563d62f91f 100644 --- a/solution/1000-1099/1076.Project Employees II/README.md +++ b/solution/1000-1099/1076.Project Employees II/README.md @@ -74,26 +74,29 @@ Result table: ```sql # Write your MySQL query statement below -SELECT project_id -FROM Project p -GROUP BY project_id -HAVING COUNT(employee_id) >= all( -SELECT COUNT(employee_id) +SELECT project_id FROM Project -GROUP BY project_id ) +GROUP BY 1 +HAVING + count(1) >= all( + SELECT count(1) + FROM Project + GROUP BY project_id + ); ``` ```sql # Write your MySQL query statement below -SELECT project_id -FROM - ( +WITH + T AS ( SELECT project_id, - dense_rank() OVER (ORDER BY COUNT(employee_id) DESC) AS rk + rank() OVER (ORDER BY count(employee_id) DESC) AS rk FROM Project - GROUP BY project_id - ) AS t + GROUP BY 1 + ) +SELECT project_id +FROM T WHERE rk = 1; ``` diff --git a/solution/1000-1099/1076.Project Employees II/README_EN.md b/solution/1000-1099/1076.Project Employees II/README_EN.md index 830d4eef2af6b..9b1130b3ee0e7 100644 --- a/solution/1000-1099/1076.Project Employees II/README_EN.md +++ b/solution/1000-1099/1076.Project Employees II/README_EN.md @@ -83,26 +83,29 @@ Employee table: ```sql # Write your MySQL query statement below -SELECT project_id -FROM Project p -GROUP BY project_id -HAVING COUNT(employee_id) >= all( -SELECT COUNT(employee_id) +SELECT project_id FROM Project -GROUP BY project_id ) +GROUP BY 1 +HAVING + count(1) >= all( + SELECT count(1) + FROM Project + GROUP BY project_id + ); ``` ```sql # Write your MySQL query statement below -SELECT project_id -FROM - ( +WITH + T AS ( SELECT project_id, - dense_rank() OVER (ORDER BY COUNT(employee_id) DESC) AS rk + rank() OVER (ORDER BY count(employee_id) DESC) AS rk FROM Project - GROUP BY project_id - ) AS t + GROUP BY 1 + ) +SELECT project_id +FROM T WHERE rk = 1; ``` diff --git a/solution/1000-1099/1076.Project Employees II/Solution.sql b/solution/1000-1099/1076.Project Employees II/Solution.sql index 336dd6878f277..33764ab346fcb 100644 --- a/solution/1000-1099/1076.Project Employees II/Solution.sql +++ b/solution/1000-1099/1076.Project Employees II/Solution.sql @@ -1,8 +1,12 @@ # Write your MySQL query statement below -SELECT project_id -FROM Project p -GROUP BY project_id -HAVING COUNT(employee_id) >= all( -SELECT COUNT(employee_id) -FROM Project -GROUP BY project_id ) \ No newline at end of file +WITH + T AS ( + SELECT + project_id, + rank() OVER (ORDER BY count(employee_id) DESC) AS rk + FROM Project + GROUP BY 1 + ) +SELECT project_id +FROM T +WHERE rk = 1; diff --git a/solution/1000-1099/1077.Project Employees III/README.md b/solution/1000-1099/1077.Project Employees III/README.md index f0c4c74bb69e5..c78ef0bdb270c 100644 --- a/solution/1000-1099/1077.Project Employees III/README.md +++ b/solution/1000-1099/1077.Project Employees III/README.md @@ -74,28 +74,31 @@ employee_id 为 1 和 3 的员工在 project_id 为 1 的项目中拥有最丰 +**方法一:内连接 + 窗口函数** + +我们先将 `Project` 表和 `Employee` 表进行内连接,然后使用窗口函数 `rank()` 对 `Project` 表进行分组,按照 `experience_years` 降序排列,最后取出每个项目中经验最丰富的雇员。 + ### **SQL** ```sql # Write your MySQL query statement below -SELECT - project_id, - employee_id -FROM - ( +WITH + T AS ( SELECT - p.project_id, - p.employee_id, + project_id, + employee_id, rank() OVER ( - PARTITION BY p.project_id - ORDER BY e.experience_years DESC + PARTITION BY project_id + ORDER BY experience_years DESC ) AS rk FROM - Project AS p - LEFT JOIN Employee AS e ON p.employee_id = e.employee_id - ) AS t + Project + JOIN Employee USING (employee_id) + ) +SELECT project_id, employee_id +FROM T WHERE rk = 1; ``` diff --git a/solution/1000-1099/1077.Project Employees III/README_EN.md b/solution/1000-1099/1077.Project Employees III/README_EN.md index 44a5cd05b2762..079154dde2144 100644 --- a/solution/1000-1099/1077.Project Employees III/README_EN.md +++ b/solution/1000-1099/1077.Project Employees III/README_EN.md @@ -85,22 +85,21 @@ Employee table: ```sql # Write your MySQL query statement below -SELECT - project_id, - employee_id -FROM - ( +WITH + T AS ( SELECT - p.project_id, - p.employee_id, + project_id, + employee_id, rank() OVER ( - PARTITION BY p.project_id - ORDER BY e.experience_years DESC + PARTITION BY project_id + ORDER BY experience_years DESC ) AS rk FROM - Project AS p - LEFT JOIN Employee AS e ON p.employee_id = e.employee_id - ) AS t + Project + JOIN Employee USING (employee_id) + ) +SELECT project_id, employee_id +FROM T WHERE rk = 1; ``` diff --git a/solution/1000-1099/1077.Project Employees III/Solution.sql b/solution/1000-1099/1077.Project Employees III/Solution.sql index 0b117cbe019cc..5d92a7a9a7513 100644 --- a/solution/1000-1099/1077.Project Employees III/Solution.sql +++ b/solution/1000-1099/1077.Project Employees III/Solution.sql @@ -1,18 +1,17 @@ # Write your MySQL query statement below -SELECT - project_id, - employee_id -FROM - ( +WITH + T AS ( SELECT - p.project_id, - p.employee_id, + project_id, + employee_id, rank() OVER ( - PARTITION BY p.project_id - ORDER BY e.experience_years DESC + PARTITION BY project_id + ORDER BY experience_years DESC ) AS rk FROM - Project AS p - LEFT JOIN Employee AS e ON p.employee_id = e.employee_id - ) AS t + Project + JOIN Employee USING (employee_id) + ) +SELECT project_id, employee_id +FROM T WHERE rk = 1; diff --git a/solution/1000-1099/1082.Sales Analysis I/README.md b/solution/1000-1099/1082.Sales Analysis I/README.md index 3541c1724e826..3071179b40e2a 100644 --- a/solution/1000-1099/1082.Sales Analysis I/README.md +++ b/solution/1000-1099/1082.Sales Analysis I/README.md @@ -88,13 +88,31 @@ Product 表: ```sql # Write your MySQL query statement below -SELECT seller_id +SELECT seller_id FROM Sales -GROUP BY seller_id -HAVING SUM(price) >= ALL ( -SELECT SUM(price) -FROM Sales -GROUP BY seller_id ) +GROUP BY seller_id +HAVING + SUM(price) >= ALL( + SELECT SUM(price) + FROM Sales + GROUP BY seller_id + ); +``` + +```sql +# Write your MySQL query statement below +WITH + T AS ( + SELECT + seller_id, + sum(price) AS tot, + rank() OVER (ORDER BY sum(price) DESC) AS rk + FROM Sales + GROUP BY seller_id + ) +SELECT seller_id +FROM T +WHERE rk = 1; ``` diff --git a/solution/1000-1099/1082.Sales Analysis I/README_EN.md b/solution/1000-1099/1082.Sales Analysis I/README_EN.md index 93144f4643ff9..e62476b467395 100644 --- a/solution/1000-1099/1082.Sales Analysis I/README_EN.md +++ b/solution/1000-1099/1082.Sales Analysis I/README_EN.md @@ -84,13 +84,31 @@ Sales table: ```sql # Write your MySQL query statement below -SELECT seller_id +SELECT seller_id FROM Sales -GROUP BY seller_id -HAVING SUM(price) >= ALL ( -SELECT SUM(price) -FROM Sales -GROUP BY seller_id ) +GROUP BY seller_id +HAVING + SUM(price) >= ALL( + SELECT SUM(price) + FROM Sales + GROUP BY seller_id + ); +``` + +```sql +# Write your MySQL query statement below +WITH + T AS ( + SELECT + seller_id, + sum(price) AS tot, + rank() OVER (ORDER BY sum(price) DESC) AS rk + FROM Sales + GROUP BY seller_id + ) +SELECT seller_id +FROM T +WHERE rk = 1; ``` diff --git a/solution/1000-1099/1082.Sales Analysis I/Solution.sql b/solution/1000-1099/1082.Sales Analysis I/Solution.sql index 143de5034579a..cebc533bbd165 100644 --- a/solution/1000-1099/1082.Sales Analysis I/Solution.sql +++ b/solution/1000-1099/1082.Sales Analysis I/Solution.sql @@ -1,8 +1,12 @@ -# Write your MySQL query statement below -SELECT seller_id -FROM Sales -GROUP BY seller_id -HAVING SUM(price) >= ALL ( -SELECT SUM(price) -FROM Sales -GROUP BY seller_id ) \ No newline at end of file +WITH + T AS ( + SELECT + seller_id, + sum(price) AS tot, + rank() OVER (ORDER BY sum(price) DESC) AS rk + FROM Sales + GROUP BY seller_id + ) +SELECT seller_id +FROM T +WHERE rk = 1; diff --git a/solution/2500-2599/2544.Alternating Digit Sum/README.md b/solution/2500-2599/2544.Alternating Digit Sum/README.md index 9179f0f00d59c..21377fbd237f4 100644 --- a/solution/2500-2599/2544.Alternating Digit Sum/README.md +++ b/solution/2500-2599/2544.Alternating Digit Sum/README.md @@ -56,7 +56,9 @@ **方法一:模拟** -从最高有效位开始,每次取出一位数字,根据其相邻数字的符号,决定当前数字的符号,然后将当前数字加入答案。 +直接根据题目描述模拟即可。 + +我们定义一个初始符号 $sign=1$,然后从最高有效位开始,每次取出一位数字 $x$,与 $sign$ 相乘,将结果加到答案中,然后将 $sign$ 取反,继续处理下一位数字,直到处理完所有数字。 时间复杂度 $O(\log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为给定数字。 @@ -66,6 +68,12 @@ +```python +class Solution: + def alternateDigitSum(self, n: int) -> int: + return sum((-1) ** i * int(x) for i, x in enumerate(str(n))) +``` + ```python class Solution: def alternateDigitSum(self, n: int) -> int: diff --git a/solution/2500-2599/2544.Alternating Digit Sum/README_EN.md b/solution/2500-2599/2544.Alternating Digit Sum/README_EN.md index e2fa733d09b33..b7222297d397e 100644 --- a/solution/2500-2599/2544.Alternating Digit Sum/README_EN.md +++ b/solution/2500-2599/2544.Alternating Digit Sum/README_EN.md @@ -60,6 +60,12 @@ ### **Python3** +```python +class Solution: + def alternateDigitSum(self, n: int) -> int: + return sum((-1) ** i * int(x) for i, x in enumerate(str(n))) +``` + ```python class Solution: def alternateDigitSum(self, n: int) -> int: diff --git a/solution/2500-2599/2544.Alternating Digit Sum/Solution.py b/solution/2500-2599/2544.Alternating Digit Sum/Solution.py index a1b03fa87f36b..5214d72010f84 100644 --- a/solution/2500-2599/2544.Alternating Digit Sum/Solution.py +++ b/solution/2500-2599/2544.Alternating Digit Sum/Solution.py @@ -1,8 +1,3 @@ -class Solution: - def alternateDigitSum(self, n: int) -> int: - ans, sign = 0, 1 - for c in str(n): - x = int(c) - ans += sign * x - sign *= -1 - return ans +class Solution: + def alternateDigitSum(self, n: int) -> int: + return sum((-1) ** i * int(x) for i, x in enumerate(str(n)))