在BigQuery SQL中使用IF语句

20
案例:我在BQ中有一个销售表格,其中item_num列包含值1、-1和0。我想要计算每个值的案例数量。

我尝试了下面的简单查询,但是count返回每个案例完全相同的数字...我错过了什么吗?

SELECT 
count(if(item_num > 0,1, 0)) as buysplus,
count(if(item_num < 0,1, 0)) as buysminus,
count(if(item_num = 0,1, 0)) as buyszero
from MyShop.Sales

谢谢

2个回答

28
SELECT 
  SUM(IF(item_num > 0, 1, 0)) AS buysplus,
  SUM(IF(item_num < 0, 1, 0)) AS buysminus,
  SUM(IF(item_num = 0, 1, 0)) AS buyszero
FROM MyShop.Sales

或者更简洁的版本:

SELECT 
  SUM(item_num > 0) AS buysplus,
  SUM(item_num < 0) AS buysminus,
  SUM(item_num = 0) AS buyszero
FROM MyShop.Sales

这将会给你以下类似的结果

buysplus    buysminus   buyszero     
4           2           3

另一个选择是它的转置版本。

SELECT 
  item_num AS buys,
  COUNT(1) AS volume
FROM MyShop.Sales
GROUP BY 1  

结果如下所示

 buys        volume  
 0          3    
 1          4    
-1          2    

2
我想补充一下,在BigQuery的标准SQL模式中,你可以简化计数操作(有些人认为这种方式更直观,虽然不太可移植)。你可以使用COUNTIF(item_num > 0)来代替SUM(IF(item_num > 0,1,0)) - justbeez

1
我会像@justbeez建议的那样使用。根据文档,它会“返回表达式中值的计数”。因此,应用于您的情况将如下所示:
SELECT 
  COUNTIF(item_num > 0) as buysplus,
  COUNTIF(item_num < 0) as buysminus,
  COUNTIF(item_num = 0) as buyszero
FROM MyShop.Sales

你没有节省很多代码,但在我看来,countsum 更符合习惯用语。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接