在 BigQuery 中使用 IF SQL

Using IF in BigQuery SQL

案例:我在 BQ 中有销售额 table,item_num 列包含值 1、-1 和 0。我想计算有多少案例我有每个值。

在下面尝试了一个简单的查询,但每个案例的计数 returns 完全相同。我缺少什么?

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

谢谢

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    

我会使用 COUNTIF,就像@justbeez 的建议一样。根据documentation

Returns the count of TRUE values for expression

所以应用于你的情况看起来像:

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

您没有节省很多代码,但是 countsum 恕我直言更符合习惯。