Sdílet prostřednictvím


GROUP_BY_AGGREGATE třída chyby

SQLSTATE: 42903

Agregační funkce nejsou v group BY povolené, ale byly nalezeny <sqlExpr>.

Parametry

  • sqlExpr: Výraz obsahující agregační funkci.

Vysvětlení

Účelem klauzule GROUP BY je identifikovat sadu odlišných skupin. Každá skupina řádků se pak sbalí do jednoho řádku pomocí agregačních funkcí v SELECT seznamu. Nakonec můžete filtrovat seskupené řádky pomocí klauzule HAVING .

Je sqlExpr umístěn v klauzuli GROUP BY namísto SELECT seznamu nebo HAVING klauzule.

Zmírnění

Zmírnění chyby závisí na příčině:

  • Zadali jste správnou funkci?

    Nahraďte sqlExpr odpovídající funkcí, která není agregační funkcí.

  • Chcete výraz agregovat?

    Odeberte výraz z GROUP BY a přidejte ho do SELECT seznamu.

  • Máte v úmyslu filtrovat agregovaný výraz?

    Odeberte výraz z klauzule GROUP BY a přidejte ho BOOLEAN do klauzule pomocí operátoru HAVING .

Příklady

-- 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