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