2016-03-21 5 views
2

Ich habe die folgende Abfrage:Google BigQuery: SUM gibt unterschiedliche Ergebnisse auch auf SUM alias ändert

SELECT 
 
     p_id, 
 
     r_date, 
 
     
 
     SUM(CASE WHEN p_type='h' AND post_p='c' THEN 1 ELSE 0 END) as test1 
 
     
 
     FROM (
 
     
 
     SELECT 152234223 AS p_id, 
 
     date AS r_date, 
 
     sequence as p_type, 
 
     
 
     LEAD(p_type, 1) OVER 
 
     (PARTITION BY u_id ORDER BY visit_id) AS post_p 
 
     
 
     FROM (Table_date_range([152234223.ses_],Timestamp('25022016'),Timestamp('29022016'))) 
 
    
 
     GROUP BY 1,2

Diese Abfrage würde das Ergebnis der Summe zurückkehrt, zum Beispiel 145. Aber wenn Ich ändere den Alias ​​der Summe wird "testing" oder "test1234567890" es würde einen anderen Wert, entweder höher oder niedriger als 145 zurückgeben.

Ich frage mich, ob mir jemand darüber erklären kann. Brauche eine Lösung!

Vielen Dank

Antwort

2

Wenn Sie Ihre Daten-Set teilen können es einfacher sein wird, dies zu bestätigen ... aber nur Code aus der Lektüre:

Ihr Problem hier zu sein scheint:

LEAD(p_type, 1) OVER 
     (PARTITION BY u_id ORDER BY u_id) AS post_p 

Wenn Sie nach demselben Attribut partitionieren und sortieren, kann die Reihenfolge der Datensätze in jeder Partition inkonsistent sein. Jedes Mal, wenn Sie die Abfrage ausführen, gibt LEAD() möglicherweise andere Ergebnisse zurück.

Der Grund, warum es scheint, als Änderung in Aliase ist wahrscheinlich im Zusammenhang mit der Rückgabe von zwischengespeicherten Ergebnissen.