2016-04-26 2 views
0

Ich habe eine numerische Spalte und ich möchte die Summe%, was jeder Wert der Gesamtsumme ist, aber ich möchte es mit absoluten Werten tun. Die Abfrage, die ich ausführen möchte, ist unten, aber ich bekomme eine Fehlermeldung, die besagt, dass ich nicht beide Aggregationsfunktionen und nicht aggregierte Felder verwenden kann. Ich möchte auch keine Joins verwenden, daher bin ich mir nicht sicher, ob das möglich ist. Vielleicht kann ich Fensterfunktionen verwenden, aber ich kenne sie nicht. Jede Hilfe mit dieser Abfrage oder das Erklären von Fensterfunktionen würde sehr geschätzt werden.Wie bekomme ich den absoluten Wert/absolute Summe und Fenster Funktionen

select ABS(val)/SUM(ABS(val)) from table 
+0

absolute Werte um negative zu vermeiden? –

Antwort

0

Wahrscheinlich so etwas wie:..

SELECT ABS(x) abs_x, RATIO_TO_REPORT(abs_x) OVER() ratio 
FROM (SELECT 3 x),(SELECT 4 x),(SELECT -2 x),(SELECT 1 x),(SELECT 7 x), (SELECT 1 x) 
1

Komplett mit Felipes Kommentar einig über (natürlich, da er einen Dev ist Anwalt für Big Data bei Google Loved Ihre Episode auf dem GCP Podcast, Felipe!), aber im Interesse, ein bisschen mehr Erklärung zu geben, werde ich meine zwei Cent hinzufügen.

Ich war auch sehr verwirrt von Fensterfunktionen, als ich anfing BigQuery zu verwenden, aber das wichtigste kleine Nugget in Felipes Kommentar ist die leere OVER() Aussage. Dies bietet im Wesentlichen eine "Open Window" -Funktion, so dass es Ihre Daten nicht partitioniert, Ihre Daten nicht sortiert oder eine Fensterrahmenklausel bereitstellt. Dies ermöglicht Ihnen, eine RATIO_TO_REPORT() über Ihre gesamte Spalte durchzuführen.

Also im Grunde, wird Ihre Anfrage so einfach wie:

SELECT ABS(number) AS abs_num, RATIO_TO_REPORT(abs_num) OVER() 
FROM [dataset.project] 

sowohl den absoluten Wert zu erhalten und das relative Verhältnis in der Säule hält, ohne zu tief in die vollen Funktionen der Fensterfunktionen zu tauchen mit .

Lesen Sie in der Query Reference Abschnitt über Fensterfunktionen, um mehr zu erfahren. Ich hoffe, das hilft!

+0

Danke! Das hat die Dinge wirklich aufgeräumt. Nur aus Neugier, was wäre, wenn ich etwas wie den absoluten Wert der Spalte a/Summe der absoluten Spalte b machen möchte? Ratio_To_report sieht so aus, als ob es nur die 1-Spalte verwendet – Feltie

+0

Die einzige Möglichkeit, dies zu tun, ist mit einem Sub-Select, wie so 'SELECT abs_num/num2_sum FROM ( SELECT ABS (Nummer) AS abs_num, SUM (ABS (number2)) OVER() AS num2_sum FROM [Dataset.Tablangemame] ) 'Es ist sehr wahrscheinlich eine elegantere Möglichkeit, dies zu erreichen, aber der Subselect ist relativ einfach. – andre622

Verwandte Themen