当前位置: 首页 > 面试题库 >

如何在firebird中使用GROUP BY

逄皓轩
2023-03-14
问题内容

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吗?)

有效查询的示例

  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



 类似资料:
  • 我正在尝试使用JPA调用一个Firebird可选过程。该方法如下所示: 是否可以使用JPA调用firebird选择过程? 如果方法中有,为什么“找不到命名查询”?

  • 问题内容: 我需要将我的android应用程序连接到我的firebird数据库 有人知道该怎么做吗? 请写代码! 问题答案: 我对Firebird并不特别熟悉,但是我猜想最好的方法是使用某种Web服务(RESTful?),该服务允许您的Android客户端与数据库进行通信。这是大多数应用程序通常使用的解决方案,因为您无法从Android直接连接到数据库。从设计的角度来看也很好,因为您的应用程序不依

  • 问题内容: 如何让今天的日期YYYYMMDD在火鸟,我一看下面的,但不能想出该怎么写。 问题答案: 我认为您可以:

  • 问题内容: 我是Firebird的新手,我遇到了很多问题。我想在从另一个表中选择的表中插入各种行。 这是代码: ID应该从66开始自动递增。posid应该从1开始自动递增。 实际上,它没有插入任何内容。 我正在使用Firebird Maestro,并且刚刚打开了SQL脚本编辑器(在执行脚本时不会抛出任何错误消息)。 有谁能够帮我? 谢谢! 附加信息: 触发器应自动增加“ ID”列-但我不知道如何精

  • Firebird是一个跨平台的关系数据库系统,目前能够运行在Windows、linux和各种Unix操作系统上,提供了大部分SQL-99标准的功能。它既能作为多用户环境下的数据库服务器运行,也提供嵌入式数据库的实现。 Firebird脱胎于Borland公司的开源版数据库Interbase6.0,是一个完全非商业化的产品,用C和C++开发。由于与interbase的血缘关系,大部分interbas

  • 问题内容: 在firebird中,我可以在where子句中使用该函数吗?我有以下sql; 我得到错误; 问题答案: 您的第三个参数无效。 是只能与关键字(例如)一起使用的字符串文字。因此,而不是您需要编写“ now”。 如果两者均等效,我更喜欢使用标准SQL函数,而不是使用DBMS特定函数。