当前位置:实例文章 » JAVA Web实例» [文章]SQL力扣练习(七)

SQL力扣练习(七)

发布人:shili8 发布时间:2025-02-23 20:30 阅读次数:0

**SQL力扣练习(七)**

### 一、表结构定义在本题中,我们将使用以下四个表:

| 表名 | 字段 |
| --- | --- |
| `Users` | id(int), name(varchar), age(int) |
| `Orders` | id(int), user_id(int), order_date(date), total_price(float) |
| `OrderItems` | id(int), order_id(int), product_id(int), quantity(int) |
| `Products` | id(int), name(varchar), price(float) |

### 二、问题一:获取用户的订单总数**问题描述**

为每个用户计算其订单总数。

**SQL代码**

sqlSELECT u.id,
 COUNT(o.id) AS order_countFROM Users uLEFT JOIN Orders o ON u.id = o.user_idGROUP BY u.id;

**注释**

* 我们使用 `LEFT JOIN` 来连接 `Users` 和 `Orders` 表,确保每个用户都有一个订单总数。
* `COUNT(o.id)` 计算每个用户的订单总数。

### 三、问题二:获取最近一年的订单总额**问题描述**

为每个用户计算其最近一年内的订单总额。

**SQL代码**
sqlSELECT u.name,
 SUM(oi.quantity * p.price) AS total_amountFROM Users uJOIN Orders o ON u.id = o.user_idJOIN OrderItems oi ON o.id = oi.order_idJOIN Products p ON oi.product_id = p.idWHERE o.order_date >= DATE_SUB(CURDATE(), INTERVAL1 YEAR)
GROUP BY u.name;

**注释**

* 我们使用 `JOIN` 来连接四个表,计算每个用户的订单总额。
* `SUM(oi.quantity * p.price)` 计算每个用户的订单总额。
* `WHERE o.order_date >= DATE_SUB(CURDATE(), INTERVAL1 YEAR)` 过滤最近一年内的订单。

### 四、问题三:获取最常购买的产品**问题描述**

为每个用户计算其最常购买的产品。

**SQL代码**
sqlSELECT u.name,
 p.name AS product_name,
 COUNT(oi.id) AS purchase_countFROM Users uJOIN Orders o ON u.id = o.user_idJOIN OrderItems oi ON o.id = oi.order_idJOIN Products p ON oi.product_id = p.idGROUP BY u.name, p.nameORDER BY purchase_count DESC;

**注释**

* 我们使用 `JOIN` 来连接四个表,计算每个用户的最常购买产品。
* `COUNT(oi.id)` 计算每个用户对某个产品的购买次数。
* `GROUP BY u.name, p.name` 分组每个用户和产品。
* `ORDER BY purchase_count DESC` 排序结果按购买次数降序。

### 五、问题四:获取总订单数**问题描述**

计算所有用户的总订单数。

**SQL代码**
sqlSELECT COUNT(o.id) AS total_order_countFROM Orders o;

**注释**

* 我们使用 `COUNT` 函数计算所有用户的总订单数。

### 六、问题五:获取最近一年的订单总额**问题描述**

为每个产品计算其最近一年内的订单总额。

**SQL代码**
sqlSELECT p.name,
 SUM(oi.quantity * p.price) AS total_amountFROM Products pJOIN OrderItems oi ON p.id = oi.product_idWHERE oi.order_date >= DATE_SUB(CURDATE(), INTERVAL1 YEAR)
GROUP BY p.name;

**注释**

* 我们使用 `JOIN` 来连接两个表,计算每个产品的订单总额。
* `SUM(oi.quantity * p.price)` 计算每个产品的订单总额。
* `WHERE oi.order_date >= DATE_SUB(CURDATE(), INTERVAL1 YEAR)` 过滤最近一年内的订单。

以上是本题中五个问题的解决方案。

其他信息

其他资源

Top