Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google bigquery 在bigquerysql中使用IF_Google Bigquery - Fatal编程技术网

Google bigquery 在bigquerysql中使用IF

Google bigquery 在bigquerysql中使用IF,google-bigquery,Google Bigquery,案例:我在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 选择

案例:我在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
选择
将(如果(项目数量>0,1,0))计算为购买价格,
将(如果(项目数量<0,1,0))计算为购买数量,
计算(如果(项目数量=0,1,0))为买方
来自MyShop,销售部
谢谢

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

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-sugests一样。据

返回
表达式的
TRUE
值的计数

因此,应用于您的案例将如下所示:

选择
将(项目数量>0)计数为buysplus,
将(项目数量<0)计数为buysminus,
将(项目数量=0)计数为buyszero
来自MyShop,销售部

您不需要保存很多代码,但count比sum IMHO更为惯用。

我想补充一点,在BigQuery的标准SQL模式下,您可以简化计数(有些人认为这更直观,但可移植性较差)。您可以使用
COUNTIF(item_num>0,1,0)
代替
SUM(IF(item_num>0)
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