SQL-如果存在条件,如何返回失败订单的数量?
所以,我有两张桌子——桌上顾客和桌上订单。SQL-如果存在条件,如何返回失败订单的数量?,sql,postgresql,Sql,Postgresql,所以,我有两张桌子——桌上顾客和桌上订单。 属性为custid、name、address的客户和属性为customerid、orderid、date和status的订单。我需要返回那些客户的ID,他们有超过15%的订单状态为“失败” 这是我写的,目前不起作用: SELECT C.custid FROM customers C WHERE C.custid IN (SELECT O.customerid, COUNT(status) FROM orders O
属性为custid、name、address的客户
和属性为customerid、orderid、date和status的订单。我需要返回那些客户的ID,他们有超过15%的订单状态为“失败”
这是我写的,目前不起作用:
SELECT C.custid
FROM customers C
WHERE C.custid IN (SELECT O.customerid, COUNT(status)
FROM orders O
WHERE O.status='failed'
GROUP BY O.custid
HAVING COUNT(status)=0.15)
以下是一种在
订单
表上使用聚合的方法:
SELECT customterid
FROM orders
GROUP BY customerid
HAVING COUNT(CASE WHEN status = 'failed' THEN 1 END) / COUNT(*) > 0.15;
让子查询只返回O.customerid。谢谢你,Tim,看起来我的想法太复杂了!在Postgres中,更容易编写:
具有平均值((状态='failed')::int)>0.15
。