如何提取customerID对应descript='refund'值,无对应值返回null?
需求说明
现有查询结果包含CustomerID和交易描述(transaction descrip)字段,需调整查询逻辑:
- 提取所有
CustomerID对应的descript='refund'值 - 若该
CustomerID无refund记录,则返回null值
当前查询结果示例
| CustomerID A | Descrip. B |
|---|---|
| 1 | purchase |
| 1 | refund |
| 2 | refund |
| 3 | purchase |
| 4 | purchase |
期望得到的结果示例
| CustomerID A | Descrip. B |
|---|---|
| 1 | refund |
| 2 | refund |
| 3 | null |
| 4 | null |
实现方案(SQL示例)
方法1:分组+条件聚合
SELECT CustomerID AS `CustomerID A`, MAX(CASE WHEN Descrip = 'refund' THEN 'refund' ELSE NULL END) AS `Descrip. B` FROM your_table_name GROUP BY CustomerID;
通过对每个CustomerID分组,用CASE语句筛选refund记录,MAX函数会保留存在的refund值,无匹配时返回NULL。
方法2:左连接实现
SELECT c.CustomerID AS `CustomerID A`, r.Descrip AS `Descrip. B` FROM (SELECT DISTINCT CustomerID FROM your_table_name) c LEFT JOIN (SELECT CustomerID, 'refund' AS Descrip FROM your_table_name WHERE Descrip = 'refund') r ON c.CustomerID = r.CustomerID;
先提取所有唯一的CustomerID,再左连接仅包含refund记录的子表,未匹配的记录会自动填充NULL。
内容的提问来源于stack exchange,提问作者jason lee
相关产品推荐
相关产品推荐

