aii*_*pee 7 sql firebird group-by
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
Run Code Online (Sandbox Code Playgroud)
我在firebird中使用SQL编辑器测试我的查询.查询是
SELECT TEST_DESC, MEASUREMENT, LL, UL
FROM T_TABLE2
GROUP BY TEST_DESC
Run Code Online (Sandbox Code Playgroud)
但我在分组中得到了这个错误.
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).
Run Code Online (Sandbox Code Playgroud)
lc.*_*lc. 11
你必须来自MySQL.MySQL的-恕我直言误导,不正确,并在黑magicky,unpredictible排序的方式-允许您指定部分GROUP BY查询和数据库引擎尝试从其余查询找出其中的价值不分组,由你列想.另一方面,标准SQL(Firebird和大多数其他RDBMS)不会; 它要求任何非聚合列包含在组中,并且任何非group-by列都要显式指定所需的行.
在你的情况下,违规列MEASUREMENT,LL和UL.你需要指定哪个 MEASUREMENT,哪个LL和UL你想要的(是的,即使它们都是相同的;数据库引擎无法知道或保证这一点),或者你想要按一个或多个列分组,或者你可能忘记聚合了(你想要SUM吗?)
有效查询的示例:
按所有列分组(相当于a SELECT DISTINCT):
SELECT TEST_DESC, MEASUREMENT, LL, UL
FROM T_TABLE2
GROUP BY TEST_DESC, MEASUREMENT, LL, UL
Run Code Online (Sandbox Code Playgroud)分组MEASUREMENT并返回MINLL和MAXUL:
SELECT TEST_DESC, MEASUREMENT, MIN(LL), MAX(UL)
FROM T_TABLE2
GROUP BY TEST_DESC, MEASUREMENT
Run Code Online (Sandbox Code Playgroud)SUM 非分组列:
SELECT TEST_DESC, SUM(MEASUREMENT), SUM(LL), SUM(UL)
FROM T_TABLE2
GROUP BY TEST_DESC
Run Code Online (Sandbox Code Playgroud)聚合的组合:
SELECT TEST_DESC, COUNT(DISTINCT MEASUREMENT), SUM(LL), MAX(UL)
FROM T_TABLE2
GROUP BY TEST_DESC
Run Code Online (Sandbox Code Playgroud)虽然某些数据库(例如 MySQL)更宽松,但在标准 SQL 中,当您使用 时GROUP BY,SELECT列表必须仅包含按聚合函数分组的列(例如SUM(),MAX())。如果允许您指定其他列,则无法预测这些列将来自分组列的哪一行——您甚至可能会混合来自不同行的列。
所以你需要做类似的事情:
SELECT TEST_DESC, MAX(MEASUREMENT) MEASUREMENT, MAX(LL) LL, MAX(UL) UL
FROM T_TABLE2
GROUP BY TEST_DESC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18810 次 |
| 最近记录: |