编写SQL,统计用户中,截止20131104各营业部客户总数、交易客户总数、潜在客户总数、当日新增交易客户数、当日新增潜在客户数。输出字段branch_name、total_num、trader_num、potential_num、tradee_day、potential_day
时间: 2023-12-21 17:07:04 浏览: 62
假设我们有以下三个表格:
**表格1:branch**
| branch_id | branch_name |
| --------- | ----------- |
| 1 | 北京分行 |
| 2 | 上海分行 |
| 3 | 广州分行 |
**表格2:customer**
| cust_id | branch_id | cust_type | create_date |
| ------- | --------- | --------- | ----------- |
| 1 | 1 | 潜在客户 | 2013-10-01 |
| 2 | 1 | 交易客户 | 2013-09-01 |
| 3 | 2 | 潜在客户 | 2013-09-15 |
| 4 | 2 | 交易客户 | 2013-08-01 |
| 5 | 3 | 潜在客户 | 2013-10-10 |
| 6 | 3 | 交易客户 | 2013-08-15 |
**表格3:customer_daily**
| cust_id | trade_date | cust_type |
| ------- | ----------- | --------- |
| 1 | 2013-11-04 | 交易客户 |
| 3 | 2013-11-04 | 潜在客户 |
| 5 | 2013-11-04 | 潜在客户 |
| 7 | 2013-11-04 | 交易客户 |
| 8 | 2013-11-04 | 潜在客户 |
则可以使用如下SQL语句进行统计:
```sql
SELECT
b.branch_name,
COUNT(*) AS total_num,
COUNT(CASE c.cust_type WHEN '交易客户' THEN 1 ELSE NULL END) AS trader_num,
COUNT(CASE c.cust_type WHEN '潜在客户' THEN 1 ELSE NULL END) AS potential_num,
COUNT(CASE WHEN cd.trade_date = '2013-11-04' AND c.cust_type = '交易客户' THEN 1 ELSE NULL END) AS tradee_day,
COUNT(CASE WHEN cd.trade_date = '2013-11-04' AND c.cust_type = '潜在客户' THEN 1 ELSE NULL END) AS potential_day
FROM
branch b
LEFT JOIN customer c ON b.branch_id = c.branch_id
LEFT JOIN customer_daily cd ON c.cust_id = cd.cust_id
WHERE
c.create_date <= '2013-11-04'
GROUP BY
b.branch_name
```
解释一下各部分的含义:
- `SELECT`语句中,我们选择了6个字段:`branch_name`表示营业部名称,`total_num`表示总客户数,`trader_num`表示交易客户数,`potential_num`表示潜在客户数,`tradee_day`表示当日新增交易客户数,`potential_day`表示当日新增潜在客户数。
- `FROM`语句中,我们使用了3个表格:`branch`表示营业部信息,`customer`表示客户信息,`customer_daily`表示客户当日交易信息。
- `LEFT JOIN`表示左连接。因为我们需要统计营业部的客户信息,所以我们需要使用`branch`表格中的数据。由于并不是所有营业部都有客户信息,所以我们使用左连接,确保即使某些营业部没有客户信息,也能在结果中显示。
- `WHERE`语句中,我们筛选出了创建时间在2013年11月4日及之前的客户。注意,这里筛选的是客户的创建时间,而不是交易时间。这是因为我们需要统计总客户数、交易客户数、潜在客户数,这些都需要统计到截止2013年11月4日的客户数,而不是当天交易的客户数。对于当天新增交易客户和当天新增潜在客户,我们会在后面的`CASE`语句中进行筛选。
- `GROUP BY`语句中,我们按照`branch_name`进行分组,确保每个营业部对应一个结果行。
- `COUNT`函数中,我们使用了`CASE`语句进行条件统计。如果条件成立,则返回1;否则返回`NULL`。由于`COUNT`函数会忽略`NULL`值,所以最终结果就是符合条件的行数,即统计数目。
希望这个SQL语句可以帮助你解决问题。
阅读全文