Google bigquery 在bigquerysql中使用IF
案例:我在BQ中有销售表,item_num列包含值1、-1和0。我想计算每个值有多少个案例 尝试了下面的一个简单查询,但count为每个案例返回完全相同的数字。。我错过了什么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 选择
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