如何使用CASE函数编写多条件SQL查询

问题描述 投票:0回答:1

The table 任务是: 计算同时进行以下操作的顾客数量:

  1. 有超过5笔付款超过5000美元
  2. 平均付款金额超过10,000美元

我已经使用窗口函数和子查询完成了它:

CREATE TABLE Customers (
client,
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 client, count(payment) from
(select *, avg(payment) over(partition by client) as avg_payment from Customers) as t1
where payment > 5000
group by client
having count(payment)>5

但是我必须在没有窗口函数和子查询的情况下实现它。有人告诉我只能使用 CASE 函数才能做到这一点。如果有人可以帮助我优化查询,我会很高兴。

postgresql multiple-conditions
1个回答
0
投票

第一种情况肯定有效,需要测试第二种情况。

SELECT CLIENT,
    COUNT(CASE WHEN PAYMENT>5000 THEN 1 ELSE NULL END) AS CNT_PY_GT_5k,
    COUNT(CASE WHEN AVG(PAYMENT)>10000 THEN 1 ELSE NULL END) AS CNT_AVG_PY_GT_10K
FROM Customers
GROUP BY CLIENT;
© www.soinside.com 2019 - 2024. All rights reserved.