如何使用CASE函数编写无窗口函数与子查询的多条件SQL查询
基于CASE函数的客户统计实现方案
可以直接通过GROUP BY结合CASE函数计算所需统计指标,在HAVING子句中同时判断两个条件,最终得到符合要求的客户数量。以下是具体实现代码:
CREATE TABLE Customers ( client INT, payment INT); INSERT INTO Customers(client, payment) VALUES (1, 1000), (1, 7000), (1, 6000), (1, 50000), (1, 5500), (1, 5600), (2, 1000), (2, 1000); -- 统计符合条件的客户总数 SELECT COUNT(DISTINCT client) AS qualified_customers FROM Customers GROUP BY client HAVING SUM(CASE WHEN payment > 5000 THEN 1 ELSE 0 END) > 5 AND AVG(payment) > 10000;
如果需要查看符合条件的客户明细及对应统计数据,可以使用这个查询:
SELECT client, SUM(CASE WHEN payment > 5000 THEN 1 ELSE 0 END) AS high_value_payment_count, AVG(payment) AS avg_payment_amount FROM Customers GROUP BY client HAVING SUM(CASE WHEN payment > 5000 THEN 1 ELSE 0 END) > 5 AND AVG(payment) > 10000;
代码说明:
SUM(CASE WHEN payment > 5000 THEN 1 ELSE 0 END):用CASE标记每笔超过5000美元的付款为1,其他为0,求和后得到每个客户这类高金额付款的总笔数。AVG(payment):直接计算每个客户的平均付款金额,也可以替换为SUM(payment)/COUNT(*),结果完全一致。GROUP BY client:按客户分组,确保每个客户的付款数据单独聚合统计。HAVING子句:同时筛选出满足两个条件的客户——高金额付款笔数超过5,且平均付款金额超过10000美元。
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

