在BigQuery SQL中使用IF

Sem*_*196 14 google-bigquery

案例:我在BQ中有Sales表,而item_num列包含值1,-1和0.我想计算每个值有多少个案例.

尝试下面的一个简单的查询,但计数返回每个案件完全相同的数字..我缺少什么?

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
Run Code Online (Sandbox Code Playgroud)

谢谢

Mik*_*ant 17

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
Run Code Online (Sandbox Code Playgroud)

甚至更简洁的版本:

SELECT 
  SUM(item_num > 0) AS buysplus,
  SUM(item_num < 0) AS buysminus,
  SUM(item_num = 0) AS buyszero
FROM MyShop.Sales
Run Code Online (Sandbox Code Playgroud)

这将给出如下结果

buysplus    buysminus   buyszero     
4           2           3
Run Code Online (Sandbox Code Playgroud)

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

SELECT 
  item_num AS buys,
  COUNT(1) AS volume
FROM MyShop.Sales
GROUP BY 1  
Run Code Online (Sandbox Code Playgroud)

结果如下

 buys        volume  
 0          3    
 1          4    
-1          2    
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,在 BigQuery 的标准 SQL 模式中,您可以简化计数(有些人认为这更直观,但可移植性较差)。您可以使用“COUNTIF(item_num &gt; 0)”代替“SUM(IF(item_num &gt; 0,1,0))” (2认同)