Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ekspresi non-agregat <expression> didasarkan pada kolom yang tidak berpartisipasi dalam klausa GROUP BY.
Tambahkan kolom atau ekspresi ke GROUP BY, agregat ekspresi, atau gunakan <expressionAnyValue> jika Anda tidak peduli nilai mana dalam grup yang dikembalikan.
Parameter-parameternya
-
ekspresi: Ekspresi non-agregasi, non-kelompok dalam daftar
SELECT. -
expressionAnyValue:
expressiondibungkus dalam fungsi agregat any_value().
Penjelasan
Dalam konteks kueri dengan klausa GROUP BY, referensi kolom lokal dalam daftar SELECT harus:
- Digunakan sebagai argumen untuk fungsi agregat , atau
- Bagian dari ekspresi yang sesuai dengan ekspresi pada klausa
GROUP BY.
Referensi kolom lokal adalah kolom yang telah dihubungkan ke referensi tabel dalam klausa FROM dari kueri.
Dengan kata lain: Referensi kolom harus menjadi bagian dari kunci pengelompokan, atau harus menjadi bagian dari agregasi.
Azure Databricks mencocokkan ekspresi berdasarkan upaya terbaik : Misalnya, akan mengenali: SELECT c1 + 5 FROM T GROUP BY 5 + c1 sebagai padanan ekspresi.
Tapi SELECT c1 FROM T GROUP BY c1 + 5 tidak cocok.
Mitigasi
Mitigasi kesalahan tergantung pada penyebabnya:
Apakah Anda melewatkan kolom pengelompokan?
Tambahkan
expression, atau subekspresiexpressionyang relevan ke klausaGROUP BY.Apakah bagian referensi kolom dari ekspresi
GROUP BYyang berbeda dariepression?Cocokkan ekspresi dalam daftar
SELECTatau sederhanakan ekspresiGROUP BY.Apakah Anda kehilangan agregasi?
Bungkus referensi kolom dengan fungsi agregat. Jika Anda hanya menginginkan nilai representatif dari grup, Anda dapat menggunakan any_value(epression).
Contoh
-- Sample data
> CREATE OR REPLACE TEMPORARY VIEW tasks(name, firstname, task, cost) AS
VALUES ('Smith' , 'Sam' , 'UNPIVOT', 10),
('Smith' , 'Sam' , 'LATERAL', 5),
('Shuster', 'Sally' , 'DELETE' , 7),
('Shuster', 'Sally' , 'GRANT' , 8);
-- `name` and `firstname` are part of the group by coumns, but incomplete
> SELECT name, firstname, sum(cost) FROM tasks GROUP BY firstname || ' ' || name;
[MISSING_AGGREGATION] The expression "name" is neither present in the group by, nor is it an aggregate function.
-- Match the GROUP BY expression
> SELECT firstname || ' ' || name, sum(cost) FROM tasks GROUP BY firstname || ' ' || name;
Sam Smith 15
Sally Shuster 15
-- Break up the GROUP BY expression
> SELECT firstname, name, sum(cost) FROM tasks GROUP BY firstname, name;
Sam Smith 15
Sally Shuster 15
-- Missing grouping column
> SELECT name, firstname, sum(cost) FROM tasks GROUP BY name;
[MISSING_AGGREGATION] The expression "firstname" is neither present in the group by, nor is it an aggregate function.
-- Add the grouping column
> SELECT firstname, name, sum(cost) FROM tasks GROUP BY firstname, name;
Sam Smith 15
Sally Shuster 15
-- Missing aggregate
> SELECT firstname, name, sum(cost), task FROM tasks GROUP BY firstname, name;
[MISSING_AGGREGATION] The expression "task" is neither present in the group by, nor is it an aggregate function.
-- Add an aggregate
> SELECT firstname, name, sum(cost), array_agg(task) FROM tasks GROUP BY firstname, name;
Sam Smith 15 ["UNPIVOT","LATERAL"]
Sally Shuster 15 ["DELETE","GRANT"]
-- Return any task
> SELECT firstname, name, sum(cost), any_value(task) FROM tasks GROUP BY firstname, name;
Sam Smith 15 LATERAL
Sally Shuster 15 DELETE
Terkait
- Fungsi Agregat
- GROUP BY klausa
- HAVING klausa
- SELECT (pilihan lanjutan)