对于postgresql中的case语句,sum aggregate返回false

时间:2018-01-11 13:57:26

标签: postgresql sum case

我有一个很长的PostgreSQL查询,下面是它的一部分,它给出了错误。

如果' TOTAL'以下给出的查询效果很好找到特定customer_key和结果列返回的订单" 1"但如果' TOTAL'订单未找到。

 select customer_key, order_key,
 sum( case when order_key  in (
    select order_key from tbl_dim_orders where order_name = 'TOTAL'
    ) then 1 
    else   0
    end
 ) = 0 as result


 from fact_sales group by 1,2
 having
 sum( case when order_key  in (
    select order_key from tbl_dim_orders where order_name = 'TOTAL'
    ) then 1 
    else   0
    end
 ) = 0 

实际上我正在努力找出哪个客户没有' TOTAL'订单及以下是样品订单表:

order_key|customer_key|order_name
1| 2|'Toy'
2|2|'Shirt'
3|2|'TOTAL'
4|1|'Toy'
5|1|'TV'

从上表中我需要客户ID,但没有总数。

任何人都可以帮我这个

1 个答案:

答案 0 :(得分:0)

只需聚合客户并使用HAVING子句断言客户没有TOTAL订单:

SELECT customer_key
FROM tbl_dim_orders
GROUP BY customer_key
HAVING SUM(CASE WHEN order_name = 'TOTAL' THEN 1 ELSE 0 END) = 0;

您似乎知道GROUP BY可能是必要的,以及HAVING条款,但也许您不知道如何将它们链接在一起。