小编典典

如何在firebird中使用GROUP BY

sql

T_TABLE2 的结构是

ID INT
TBL1_ID INT
TESTER VARCHAR
LOT_ID VARCHAR
GRP VARCHAR
SITE_NUM INT
TEST_NUM VARCHAR
TEST_DESC VARCHAR
MEASUREMENT DOUBLE PRECISION
UNIT VARCHAR
LL DOUBLE PRECISION
UL DOUBLE PRECISION
STATUS VARCHAR

我在firebird中使用SQL编辑器测试了我的查询。查询是

SELECT TEST_DESC, MEASUREMENT, LL, UL 
FROM T_TABLE2 
GROUP BY TEST_DESC

但我在分组时遇到了这个错误。

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

阅读 253

收藏
2021-03-10

共1个答案

小编典典

您必须来自MySQL。MySQL-IMHO令人误解,错误且以一种黑变的,不可预测的方式-允许您指定部分GROUP BY查询,而数据库引擎会尝试从其余查询中找出您未分组的列中的 哪个
值想。另一方面,标准SQL(Firebird和大多数其他RDBMS)则不这样做。它要求将任何非聚合列包含在分组依据中,并且需要任何非分组依据列来明确指定所需的

在你的情况下,违规列MEASUREMENTLLUL。你需要指定
MEASUREMENTLLUL你想要的(是的,即使他们都是一样的;数据库引擎无法知道或保证这种方式),或者如果你通过一个想组或多列或可能你忘了汇总(您想要SUM吗?)


有效查询的示例:

  1. 按所有列分组(相当于SELECT DISTINCT):

    SELECT TEST_DESC, MEASUREMENT, LL, UL
    

    FROM T_TABLE2
    GROUP BY TEST_DESC, MEASUREMENT, LL, UL

  2. 分组,MEASUREMENT并返回MINLL和MAXUL:

    SELECT TEST_DESC, MEASUREMENT, MIN(LL), MAX(UL)
    

    FROM T_TABLE2
    GROUP BY TEST_DESC, MEASUREMENT

  3. SUM 未分组的列:

    SELECT TEST_DESC, SUM(MEASUREMENT), SUM(LL), SUM(UL)
    

    FROM T_TABLE2
    GROUP BY TEST_DESC

  4. 聚合的组合:

    SELECT TEST_DESC, COUNT(DISTINCT MEASUREMENT), SUM(LL), MAX(UL)
    

    FROM T_TABLE2
    GROUP BY TEST_DESC

2021-03-10