2016-03-02 6 views
6

Caso: Ho la tabella delle vendite in BQ e la colonna articolo numero contiene i valori 1, -1 e 0. Voglio contare quanti casi ho per ogni valore.Utilizzo di IF in BigQuery SQL

Provato una semplice query di seguito, ma conteggio restituisce esattamente lo stesso numero per ogni caso .. Cosa mi manca?

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 

grazie

risposta

8
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 

o versione ancora meno verbous di esso:

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

questo vi darà yo risultato come qui di seguito

buysplus buysminus buyszero  
4   2   3 

Un'altra opzione sarebbe essere trasposta versione di esso

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

con il risultato come di seguito

buys  volume 
0   3  
1   4  
-1   2  
+0

Vorrei aggiungere che in modalità standard SQL di BigQuery, è possibile semplificare il conteggio (che alcune persone trovano più intuitivo, anche se meno portatile). Invece di 'SUM (IF (item_num> 0,1,0))' puoi usare 'COUNTIF (item_num> 0)' – justbeez