# 184 电商模式

### **SQL180** **某宝店铺的SPU数量** -完成

简单 通过率：55.17% 时间限制：1秒 空间限制：256M

#### 描述

11月结束后，小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。

已知产品情况表product\_tb如下（其中，item\_id指某款号的具体货号，style\_id指款号，tag\_price表示标签价格，inventory指库存量）：

| item\_id | style\_id | tag\_price | inventory |
| -------- | --------- | ---------- | --------- |
| A001     | A         | 100        | 20        |
| A002     | A         | 120        | 30        |
| A003     | A         | 200        | 15        |
| B001     | B         | 130        | 18        |
| B002     | B         | 150        | 22        |
| B003     | B         | 125        | 10        |
| B004     | B         | 155        | 12        |
| C001     | C         | 260        | 25        |
| C002     | C         | 280        | 18        |

请你统计每款的SPU（货号）数量，并按SPU数量降序排序，以上例子的输出结果如下：

| style\_id | SPU\_num |
| --------- | -------- |
| B         | 4        |
| A         | 3        |
| C         | 2        |

#### 示例1

输入：

```
drop table if exists product_tb;
CREATE TABLE product_tb(
item_id char(10) NOT NULL,
style_id char(10) NOT NULL,   
tag_price int(10) NOT NULL,
inventory int(10) NOT NULL
);
INSERT INTO product_tb VALUES('A001', 'A', 100,  20);
INSERT INTO product_tb VALUES('A002', 'A', 120, 30);
INSERT INTO product_tb VALUES('A003', 'A', 200,  15);
INSERT INTO product_tb VALUES('B001', 'B', 130, 18);
INSERT INTO product_tb VALUES('B002', 'B', 150,  22);
INSERT INTO product_tb VALUES('B003', 'B', 125, 10);
INSERT INTO product_tb VALUES('B004', 'B', 155,  12);
INSERT INTO product_tb VALUES('C001', 'C', 260, 25);
INSERT INTO product_tb VALUES('C002', 'C', 280,  18);
```

复制

输出：

```
B|4
A|3
C|2
```

#### 解答：自己

```sql
select style_id,
       count(item_id) as SPU_num
from product_tb
group by style_id
order by SPU_num desc;
```

### **SQL181** **某宝店铺的实际销售额与客单价** -完成

简单 通过率：41.90% 时间限制：1秒 空间限制：256M

#### 描述

11月结束后，小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。

已知11月份销售数据表sales\_tb如下（其中，sales\_date表示销售日期，user\_id指用户编号，item\_id指货号，sales\_num表示销售数量，**sales\_price表示结算金额**）：

| sales\_date | user\_id | item\_id | sales\_num | sales\_price |
| ----------- | -------- | -------- | ---------- | ------------ |
| 2021-11-01  | 1        | A001     | 1          | 90           |
| 2021-11-01  | 2        | A002     | 2          | 220          |
| 2021-11-01  | 2        | B001     | 1          | 120          |
| 2021-11-02  | 3        | C001     | 2          | 500          |
| 2021-11-02  | 4        | B001     | 1          | 120          |
| 2021-11-03  | 5        | C001     | 1          | 240          |
| 2021-11-03  | 6        | C002     | 1          | 270          |
| 2021-11-04  | 7        | A003     | 1          | 180          |
| 2021-11-04  | 8        | B002     | 1          | 140          |
| 2021-11-04  | 9        | B001     | 1          | 125          |
| 2021-11-05  | 10       | B003     | 1          | 120          |
| 2021-11-05  | 10       | B004     | 1          | 150          |
| 2021-11-05  | 10       | A003     | 1          | 180          |
| 2021-11-06  | 11       | B003     | 1          | 120          |
| 2021-11-06  | 10       | B004     | 1          | 150          |

请你统计实际总销售额（结算金额的和）与客单价（总销售额/总用户数，结果保留两位小数），以上例子的输出结果如下：

| sales\_total | per\_trans |
| ------------ | ---------- |
| 2725         | 247.73     |

#### 示例1

输入：

```
drop table if exists sales_tb;
CREATE TABLE sales_tb(
sales_date date NOT NULL,
user_id int(10) NOT NULL,
item_id char(10) NOT NULL,
sales_num int(10) NOT NULL,
sales_price int(10) NOT NULL
);

INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001',  1, 90);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002',  2, 220);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001',  2, 500);
INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001',  1, 240);
INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002',  1, 270);
INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002',  1, 140);
INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001',  1, 125);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004',  1, 150);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004',  1, 150);
```

输出：

```
2725|247.73
```

#### 解答：自己

```sql
select sum(sales_price)                                     as sales_total,
       round(sum(sales_price) / count(distinct user_id), 2) as per_trans
from sales_tb
where DATE_FORMAT(sales_date, "%Y-%m") = "2021-11";
```

### **SQL182** **某宝店铺折扣率** -完成

中等 通过率：30.04% 时间限制：1秒 空间限制：256M

#### 描述

11月结束后，小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。

已知产品情况表product\_tb如下（其中，item\_id指某款号的具体货号，style\_id指款号，tag\_price表示标签价格，inventory指库存量）：

| item\_id | style\_id | tag\_price | inventory |
| -------- | --------- | ---------- | --------- |
| A001     | A         | 100        | 20        |
| A002     | A         | 120        | 30        |
| A003     | A         | 200        | 15        |
| B001     | B         | 130        | 18        |
| B002     | B         | 150        | 22        |
| B003     | B         | 125        | 10        |
| B004     | B         | 155        | 12        |
| C001     | C         | 260        | 25        |
| C002     | C         | 280        | 18        |

11月份销售数据表sales\_tb如下（其中，sales\_date表示销售日期，user\_id指用户编号，item\_id指货号，sales\_num表示销售数量，sales\_price表示结算金额）：

| sales\_date | user\_id | item\_id | sales\_num | sales\_price |
| ----------- | -------- | -------- | ---------- | ------------ |
| 2021-11-01  | 1        | A001     | 1          | 90           |
| 2021-11-01  | 2        | A002     | 2          | 220          |
| 2021-11-01  | 2        | B001     | 1          | 120          |
| 2021-11-02  | 3        | C001     | 2          | 500          |
| 2021-11-02  | 4        | B001     | 1          | 120          |
| 2021-11-03  | 5        | C001     | 1          | 240          |
| 2021-11-03  | 6        | C002     | 1          | 270          |
| 2021-11-04  | 7        | A003     | 1          | 180          |
| 2021-11-04  | 8        | B002     | 1          | 140          |
| 2021-11-04  | 9        | B001     | 1          | 125          |
| 2021-11-05  | 10       | B003     | 1          | 120          |
| 2021-11-05  | 10       | B004     | 1          | 150          |
| 2021-11-05  | 10       | A003     | 1          | 180          |
| 2021-11-06  | 11       | B003     | 1          | 120          |
| 2021-11-06  | 10       | B004     | 1          | 150          |

请你统计折扣率（GMV/标签价格，GMV指的是成交金额），以上例子的输出结果如下（折扣率保留两位小数）：

gmv = 销售数量 \* 结算金额

| discount\_rate(%) |
| ----------------- |
| 93.97             |

#### 示例1

输入：

```
drop table if exists product_tb;
CREATE TABLE product_tb(
item_id char(10) NOT NULL,
style_id char(10) NOT NULL,
tag_price int(10) NOT NULL,
inventory int(10) NOT NULL
);
INSERT INTO product_tb VALUES('A001', 'A', 100,  20);
INSERT INTO product_tb VALUES('A002', 'A', 120, 30);
INSERT INTO product_tb VALUES('A003', 'A', 200,  15);
INSERT INTO product_tb VALUES('B001', 'B', 130, 18);
INSERT INTO product_tb VALUES('B002', 'B', 150,  22);
INSERT INTO product_tb VALUES('B003', 'B', 125, 10);
INSERT INTO product_tb VALUES('B004', 'B', 155,  12);
INSERT INTO product_tb VALUES('C001', 'C', 260, 25);
INSERT INTO product_tb VALUES('C002', 'C', 280,  18);

drop table if exists sales_tb;
CREATE TABLE sales_tb(
sales_date date NOT NULL,
user_id int(10) NOT NULL,
item_id char(10) NOT NULL,
sales_num int(10) NOT NULL,
sales_price int(10) NOT NULL
);

INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001',  1, 90);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002',  2, 220);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001',  2, 500);
INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001',  1, 240);
INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002',  1, 270);
INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002',  1, 140);
INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001',  1, 125);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004',  1, 150);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004',  1, 150);
```

复制

输出：

```
93.97
```

#### 解答

```sql
SELECT ROUND(SUM(sales_price) * 100 / SUM(sales_num * tag_price), 2) 'discount_rate(%)'
FROM sales_tb
         LEFT JOIN product_tb USING (item_id);
```

### **SQL183** **某宝店铺动销率与售罄率**

较难 通过率：18.58% 时间限制：1秒 空间限制：256M

#### 描述

11月结束后，小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。

已知产品情况表product\_tb如下（其中，item\_id指某款号的具体货号，style\_id指款号，tag\_price表示标签价格，inventory指库存量）：

| item\_id | style\_id | tag\_price | inventory |
| -------- | --------- | ---------- | --------- |
| A001     | A         | 100        | 20        |
| A002     | A         | 120        | 30        |
| A003     | A         | 200        | 15        |
| B001     | B         | 130        | 18        |
| B002     | B         | 150        | 22        |
| B003     | B         | 125        | 10        |
| B004     | B         | 155        | 12        |
| C001     | C         | 260        | 25        |
| C002     | C         | 280        | 18        |

11月份销售数据表sales\_tb如下（其中，sales\_date表示销售日期，user\_id指用户编号，item\_id指货号，sales\_num表示销售数量，sales\_price表示结算金额）：

| sales\_date | user\_id | item\_id | sales\_num | sales\_price |
| ----------- | -------- | -------- | ---------- | ------------ |
| 2021-11-01  | 1        | A001     | 1          | 90           |
| 2021-11-01  | 2        | A002     | 2          | 220          |
| 2021-11-01  | 2        | B001     | 1          | 120          |
| 2021-11-02  | 3        | C001     | 2          | 500          |
| 2021-11-02  | 4        | B001     | 1          | 120          |
| 2021-11-03  | 5        | C001     | 1          | 240          |
| 2021-11-03  | 6        | C002     | 1          | 270          |
| 2021-11-04  | 7        | A003     | 1          | 180          |
| 2021-11-04  | 8        | B002     | 1          | 140          |
| 2021-11-04  | 9        | B001     | 1          | 125          |
| 2021-11-05  | 10       | B003     | 1          | 120          |
| 2021-11-05  | 10       | B004     | 1          | 150          |
| 2021-11-05  | 10       | A003     | 1          | 180          |
| 2021-11-06  | 11       | B003     | 1          | 120          |
| 2021-11-06  | 10       | B004     | 1          | 150          |

请你统计每款的动销率（pin\_rate，有销售的SKU数量/在售SKU数量）与售罄率（sell-through\_rate，GMV/备货值，备货值=吊牌价\*库存数），按style\_id升序排序

sku：动销率 Stock Keeping Unit (库存量单位)。在很多业务场景下，是计算库存进出计量，物理上不可分割的最小存货单元，表示某款商品的具体配置（规格、颜色等）。

有销售的SKU数量：售出的SKU数量总和（商品期间销售数量）

在售的SKU数量 ：剩余（总库存 - 售出）库存SKU的数量总和（商品期末库存数量）

GMV ：所有订单的金额总和（很多场景下，下单未付款的订单金额也计算在内）

吊牌价 ：商品详情页显示的价格

以上例子的输出结果如下：

| style\_id | pin\_rate(%) | sell-through\_rate(%) |
| --------- | ------------ | --------------------- |
| A         | 8.33         | 7.79                  |
| B         | 14.81        | 11.94                 |
| C         | 10.26        | 8.75                  |

#### 示例1

输入：

```
drop table if exists product_tb;
CREATE TABLE product_tb(
item_id char(10) NOT NULL,
style_id char(10) NOT NULL,
tag_price int(10) NOT NULL,
inventory int(10) NOT NULL
);
INSERT INTO product_tb VALUES('A001', 'A', 100,  20);
INSERT INTO product_tb VALUES('A002', 'A', 120, 30);
INSERT INTO product_tb VALUES('A003', 'A', 200,  15);
INSERT INTO product_tb VALUES('B001', 'B', 130, 18);
INSERT INTO product_tb VALUES('B002', 'B', 150,  22);
INSERT INTO product_tb VALUES('B003', 'B', 125, 10);
INSERT INTO product_tb VALUES('B004', 'B', 155,  12);
INSERT INTO product_tb VALUES('C001', 'C', 260, 25);
INSERT INTO product_tb VALUES('C002', 'C', 280,  18);

drop table if exists sales_tb;
CREATE TABLE sales_tb(
sales_date date NOT NULL,
user_id int(10) NOT NULL,
item_id char(10) NOT NULL,
sales_num int(10) NOT NULL,
sales_price int(10) NOT NULL
);

INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001',  1, 90);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002',  2, 220);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001',  2, 500);
INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001',  1, 240);
INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002',  1, 270);
INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002',  1, 140);
INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001',  1, 125);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004',  1, 150);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004',  1, 150);
```

复制

输出：

```
A|8.33|7.79
B|14.81|11.94
C|10.26|8.75
```

#### 解答

```sql
with b as ( select item_id, sum(sales_num) as num, sum(sales_price) as item_GMV from sales_tb group by item_id )
select style_id,
       round(100 * sum(num) / (sum(inventory) - sum(num)), 2)     as 'pin_rate(%)',
       round(100 * sum(item_GMV) / sum(inventory * tag_price), 2) as 'sell-through_rate(%)'
from product_tb a
         join b on a.item_id = b.item_id
group by style_id
order by style_id;
```

### **SQL184** **某宝店铺连续2天及以上购物的用户及其对应的天数**

较难 通过率：26.98% 时间限制：1秒 空间限制：256M

### 描述

11月结束后，小牛同学需要对其在某宝的网店就11月份用户交易情况和产品情况进行分析以更好的经营小店。

11月份销售数据表sales\_tb如下（其中，sales\_date表示销售日期，user\_id指用户编号，item\_id指货号，sales\_num表示销售数量，sales\_price表示结算金额）：

| sales\_date | user\_id | item\_id | sales\_num | sales\_price |
| ----------- | -------- | -------- | ---------- | ------------ |
| 2021-11-01  | 1        | A001     | 1          | 90           |
| 2021-11-01  | 2        | A002     | 2          | 220          |
| 2021-11-01  | 2        | B001     | 1          | 120          |
| 2021-11-02  | 3        | C001     | 2          | 500          |
| 2021-11-02  | 4        | B001     | 1          | 120          |
| 2021-11-03  | 5        | C001     | 1          | 240          |
| 2021-11-03  | 6        | C002     | 1          | 270          |
| 2021-11-04  | 7        | A003     | 1          | 180          |
| 2021-11-04  | 8        | B002     | 1          | 140          |
| 2021-11-04  | 9        | B001     | 1          | 125          |
| 2021-11-05  | 10       | B003     | 1          | 120          |
| 2021-11-05  | 10       | B004     | 1          | 150          |
| 2021-11-05  | 10       | A003     | 1          | 180          |
| 2021-11-06  | 11       | B003     | 1          | 120          |
| 2021-11-06  | 10       | B004     | 1          | 150          |

请你统计连续2天及以上在该店铺购物的用户及其对应的次数（若有多个用户，按user\_id升序排序），以上例子的输出结果如下：

| user\_id | days\_count |
| -------- | ----------- |
| 10       | 2           |

### 示例1

输入：

```
drop table if exists sales_tb;
CREATE TABLE sales_tb(
sales_date date NOT NULL,
user_id int(10) NOT NULL,
item_id char(10) NOT NULL,
sales_num int(10) NOT NULL,
sales_price int(10) NOT NULL
);

INSERT INTO sales_tb VALUES('2021-11-1', 1, 'A001',  1, 90);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'A002',  2, 220);
INSERT INTO sales_tb VALUES('2021-11-1', 2, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-2', 3, 'C001',  2, 500);
INSERT INTO sales_tb VALUES('2021-11-2', 4, 'B001',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-3', 5, 'C001',  1, 240);
INSERT INTO sales_tb VALUES('2021-11-3', 6, 'C002',  1, 270);
INSERT INTO sales_tb VALUES('2021-11-4', 7, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-4', 8, 'B002',  1, 140);
INSERT INTO sales_tb VALUES('2021-11-4', 9, 'B001',  1, 125);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'B004',  1, 150);
INSERT INTO sales_tb VALUES('2021-11-5', 10, 'A003',  1, 180);
INSERT INTO sales_tb VALUES('2021-11-6', 11, 'B003',  1, 120);
INSERT INTO sales_tb VALUES('2021-11-6', 10, 'B004',  1, 150);
```

复制

输出：

```
10|2
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://qiangrens-organization.gitbook.io/qkd90/shu-ju-ku-he-zhong-jian-jian/sql-yu-ju/180184-dian-shang-mo-shi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
