مشاركة عبر


فئة الخطأ GROUP_BY_AGGREGATE

SQLSTATE: 42903

لا يسمح بالدالات التجميعية في GROUP BY، ولكنها موجودة <sqlExpr>.

معلمات

  • sqlExpr: تعبير يحتوي على دالة تجميعية.

تفسير

الغرض من العبارة GROUP BY هو تحديد مجموعة المجموعات المميزة. ثم يتم طي كل مجموعة من الصفوف في صف واحد باستخدام الدالات التجميعية في SELECT القائمة. وأخيرا، يمكنك بعد ذلك تصفية الصفوف المجمعة باستخدام العبارة HAVING .

sqlExpr يقع في GROUP BY عبارة بدلا من القائمة أو HAVING العبارةSELECT.

التخفيف

يعتمد التخفيف من الخطأ على السبب:

  • هل حددت الدالة الصحيحة؟

    استبدل sqlExpr بدالة مناسبة ليست دالة تجميعية.

  • هل تنوي تجميع التعبير؟

    قم بإزالة التعبير من GROUP BY وأضفه إلى SELECT القائمة.

  • هل تنوي التصفية على التعبير المجمع؟

    قم بإزالة التعبير من العبارة GROUP BY وإضافته باستخدام BOOLEAN عامل تشغيل إلى العبارة HAVING .

امثله

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