sql - 如何在firebird中使用GROUP BY

标签 sql group-by firebird

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

最佳答案

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

在您的情况下,有问题的列是MEASUREMENTLLUL。您需要指定所需的MEASUREMENTLLUL(是的,即使它们都相同;数据库引擎也无法知道或保证这一点),或者是否要分组一列或多列,或者您可能忘记了汇总(是否要SUM?)



有效查询的示例:


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

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

也按MEASUREMENT分组,并返回MIN LL和MAX UL:

SELECT TEST_DESC, MEASUREMENT, MIN(LL), MAX(UL)
FROM T_TABLE2
GROUP BY TEST_DESC, MEASUREMENT

SUM未分组的列:

SELECT TEST_DESC, SUM(MEASUREMENT), SUM(LL), SUM(UL)
FROM T_TABLE2
GROUP BY TEST_DESC

聚合的组合:

SELECT TEST_DESC, COUNT(DISTINCT MEASUREMENT), SUM(LL), MAX(UL)
FROM T_TABLE2
GROUP BY TEST_DESC

关于sql - 如何在firebird中使用GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171901/

相关文章:

mysql - 支持分页查询的数据库最低版本

r - dplyr:按组减去与给定条件匹配的值

python - 带 Groupby 的加权中位数和 Python 中的聚合

mysql - MySQL 中的自然连接与匹配列

mysql - 有关 Mysql 计数的任何建议

MySQL - 获取最低值

java - 如何使用 LibreOffice 连接到 Firebird

delphi - 避免 IBX 组件的事件事务处理时间过长

database-connection - Firebird 2.5 C++ 客户端 : error with DATE data type

mysql - MariaDB 默认 float 不能包含小数位