问题2: 编写一段SQL,找到2012年9月份全行持有产品”05108100”的客户列表中持有其他产品的客户数,并按照产品客户数降序排列(9分) 产品编号 客户数 Xxxxxx 123456 Xxxxxx 100000
时间: 2024-02-12 14:04:15 浏览: 22
以下是SQL语句,可以满足您的要求:
```sql
SELECT
T1.Cust_Id,
COUNT(DISTINCT T2.Product_Id) AS 客户数
FROM
T4 T1
JOIN T4 T2 ON T1.Cust_Id = T2.Cust_Id
WHERE
T1.Product_Id = '05108100'
AND T1.Txn_Dt >= '2012-09-01'
AND T1.Txn_Dt <= '2012-09-30'
AND T2.Product_Id != '05108100'
GROUP BY
T1.Cust_Id
ORDER BY
客户数 DESC;
```
其中,通过`JOIN`操作将持有产品"05108100"的客户与持有其他产品的客户进行关联,通过`COUNT(DISTINCT T2.Product_Id)`统计持有其他产品的客户数量,通过`GROUP BY T1.Cust_Id`按照客户进行分组,通过`ORDER BY 客户数 DESC`按照客户数降序排列。
相关问题
问题3:编写一段SQL,找到2012年9月份全行所有产品余额总计超过1000万的前10家分行,并按照产品余额总计降序排列(8分) 分行编号 产品编号 余额总计 Xxxxxx Xxxxxx 12345600 Xxxxxx Xxxxxx 10000000 .. ..
以下是一段SQL代码,可以满足你的需求:
```
SELECT Org_Id, SUM(Amt) AS Balance
FROM T4
WHERE Product_Id != '05108100' AND Txn_Dt BETWEEN '2012-09-01' AND '2012-09-30'
GROUP BY Org_Id
HAVING SUM(Amt) > 10000000
ORDER BY Balance DESC
LIMIT 10;
```
解释:
1. 在 `WHERE` 子句中,我们排除了产品编号为 `05108100` 的记录,因为我们需要找到持有其他产品的客户数。
2. `Txn_Dt BETWEEN '2012-09-01' AND '2012-09-30'` 用于筛选出 2012 年 9 月份的记录。
3. 在 `GROUP BY` 子句中,我们按照分行编号对记录进行分组,并使用 `SUM` 函数计算每个分行的产品余额总计。
4. 在 `HAVING` 子句中,我们筛选出产品余额总计超过 1000 万的分行。
5. 最后,我们按照产品余额总计降序排列,并使用 `LIMIT` 子句限制结果集的大小为 10。
数据模型如下: T4: (客户持有产品汇总表) 字段英文名 字段中文名 类型 主键标志 注释 Rec_No 序列号 Char(9) Y Cust_Id 客户编号 CHAR(13) Y Product_Id 产品编号 CHAR(8) Y Amt 产品余额 Decimal(15,2) N Txn_Dt 交易日期 DATE N Org_Id 分行编号 CHAR(6) N 问题1:编写一段SQL,统计2012年9月深圳分行(310111)各产品的客户数以及余额汇总,并按照产品客户数降序排列(8分) 产品编号 客户数 余额汇总 Xxxxxx 123456 88888888 Xxxxxx 100000 99999999 .. .. ..
以下是SQL语句,可以满足您的要求:
```sql
SELECT
Product_Id AS 产品编号,
COUNT(DISTINCT Cust_Id) AS 客户数,
SUM(Amt) AS 余额汇总
FROM
T4
WHERE
Org_Id = '310111'
AND Txn_Dt >= '2012-09-01'
AND Txn_Dt <= '2012-09-30'
GROUP BY
Product_Id
ORDER BY
客户数 DESC;
```
其中,`COUNT(DISTINCT Cust_Id)`用于统计不同的客户数量,`SUM(Amt)`用于计算余额汇总。通过`GROUP BY`按照产品编号进行分组,并通过`ORDER BY`按照客户数降序排列。