我已经使用窗口函数和子查询完成了它:
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 函数才能做到这一点。如果有人可以帮助我优化查询,我会很高兴。
第一种情况肯定有效,需要测试第二种情况。
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;