Nicht verwenden, group by-und over(partition by) in der gleichen Abfrage?
Ich habe eine Tabelle myTable
mit 3 Spalten. col_1
ist ein INTEGER
und die anderen 2 Spalten DOUBLE
. Zum Beispiel col_1={1, 2}, col_2={0.1, 0.2, 0.3}
. Jedes element in col_1
setzt alle Werte der col_2
und col_2
wiederholte Werte aufweist, die für jedes element in col_1
. Die 3. Spalte kann einen beliebigen Wert haben, wie unten gezeigt:
col_1 | col_2 | Value
----------------------
1 | 0.1 | 1.0
1 | 0.2 | 2.0
1 | 0.2 | 3.0
1 | 0.3 | 4.0
1 | 0.3 | 5.0
2 | 0.1 | 6.0
2 | 0.1 | 7.0
2 | 0.1 | 8.0
2 | 0.2 | 9.0
2 | 0.3 | 10.0
Was ich will, ist die Verwendung einer Aggregat-Funktion SUM()
auf die Value
Spalte partition col_1
nach col_2
. Die Obige Tabelle sollte wie folgt Aussehen:
col_1 | col_2 | sum_value
----------------------
1 | 0.1 | 1.0
1 | 0.2 | 5.0
1 | 0.3 | 9.0
2 | 0.1 | 21.0
2 | 0.2 | 9.0
2 | 0.3 | 10.0
Habe ich versucht, das folgende SQL-Abfrage:
SELECT col_1, col_2, sum(Value) over(partition by col_1) as sum_value
from myTable
GROUP BY col_1, col_2
Aber auf DB2 v10.5 es gab folgende Fehler:
SQL0119N An expression starting with "Value" specified in a SELECT
clause, HAVING clause, or ORDER BY clause is not specified in the
GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER
BY clause with a column function and no GROUP BY clause is specified.
Kann Sie freundlich darauf hinweisen, was falsch ist. Ich habe nicht viel Erfahrung mit SQL.
Danke.
- Was hat MySQL mit der Frage zu tun? (Nicht-tag-Produkte, die nicht beteiligt...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können, aber Sie sollten konsistent sein in Bezug auf die Gruppierung der Ebenen.
Das heißt, wenn die Abfrage eine GROUP BY-Abfrage, dann in eine analytische Funktion
Sie können verwenden Sie nur "detail" Spalten aus der "nicht-analytischen" Teil von Ihnen ausgewählten
Spalten.
Man kann also entweder die GROUP-BY-Spalten oder den nicht-analytischen Aggregate,
wie in diesem Beispiel:
Hoffe, das hilft
col_1
statt die Summe für jede einzelne element incol_2
pro Elemente incol_1
Fand ich die Lösung.
Brauche ich mich nicht zu verwenden
OVER(PARTITION BY col_1)
weil es bereits in derGROUP BY
- Klausel. So, die folgende Abfrage gibt mir die richtige Antwort:da ich mich schon die Gruppierung w.r.t
col_1
undcol_2
.Dave, vielen Dank, ich habe die Idee von deinem post.