kelas kesalahan GROUP_BY_AGGREGATE

SQLSTATE: 42903

Fungsi agregat tidak diizinkan dalam GROUP BY, tetapi ditemukan <sqlExpr>.

Parameter

  • sqlExpr: Ekspresi yang berisi fungsi agregat.

Penjelasan

Tujuan dari klausul GROUP BY adalah untuk mengidentifikasi kumpulan grup yang berbeda. Setiap grup baris kemudian diciutkan menjadi satu baris menggunakan fungsi agregat dalam daftar SELECT. Terakhir, Anda kemudian dapat memfilter baris yang dikelompokkan menggunakan klausa HAVING.

sqlExpr terletak di klausa GROUP BY alih-alih daftar SELECT atau klausa HAVING.

Mitigasi

Mitigasi kesalahan tergantung pada penyebabnya:

  • Apakah Anda menentukan fungsi yang benar?

    Ganti sqlExpr dengan fungsi yang sesuai yang bukan fungsi agregat.

  • Apakah Anda berniat untuk mengagregasi ekspresi?

    Hapus ekspresi dari GROUP BY dan tambahkan ke daftar SELECT.

  • Apakah Anda ingin memfilter ekspresi agregat?

    Hapus ekspresi dari klausa GROUP BY dan tambahkan menggunakan operator BOOLEAN ke klausa HAVING.

Contoh

-- An aggregation in the GROUP BY clause
> SELECT a FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a, sum(b);
 [GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found sum(T.b).; line 1 pos 58;

-- Move the expression to the SELECT list
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3) AS T(a, b) GROUP BY a;
 1    5

-- An aggregation in the GROUP BY clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a, sum(b) > 1;
 [GROUP_BY_AGGREGATE] Aggregate functions are not allowed in GROUP BY, but found (sum(T.b) > CAST(1 AS BIGINT)).; line 1 pos 74;

-- Move the expression to the HAVING clause
> SELECT a, sum(b) FROM VALUES(1, 2), (1, 3), (2, 1) AS T(a, b) GROUP BY a HAVING sum(b) > 1;
 1    5