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

H2 DB-列必须在“分组依据”列表中

上官鸿朗
2023-03-14
问题内容

我正在使用H2-DB访问静态数据库…

我有一张桌子,看起来像:

COUNTRY     STATE       CITY         LAT     LNG     COUNTRYID      STATEID     CITYID 
"Germany"   "Berlin"    ""           1.23    1.23    1              1           0
"Germany"   "München"   ""           1.23    1.23    1              2           0
"USA"       "Alabama"   "Auburn"     1.23    1.23    2              1           1
"USA"       "Alabama"   "Birmingham" 1.23    1.23    2              1           2
"USA"       "Alaska"    "Anchorage"  1.23    1.23    2              2           1
"USA"       "Alaska"    "Cordova"    1.23    1.23    2              2           2

它的名单很多,有很多国家,其中大多数只有国家和州(例如德国在这里,而州是城市),也有一个城市(在这里是美国)…

问题是现在,当我查询

SELECT * FROM MyTable WHERE COUNTRY = 'Germany' group by STATE order by STATE

为了得到州(或城市)的排序列表,我收到一条错误消息,说

Field CITY must be in the GROUP BY list

如果该行有一个城市,我需要整行,否则我只需要State列,但是查询后我可以知道,是否使用了city列,所以我必须查询“ *”的“ STATE”

查询应该可以,还是?在MySql上它可以正常工作…所以这里出了什么问题?

发现此内容是否有帮助:http
:
//www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016

梅丁


问题答案:

MySQL就此而言是坏的。它允许聚合函数GROUP BYgroup by或参数中都不存在的列。实际上,文档警告不要使用此扩展名。

因此,您可以执行以下操作:

SELECT state
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

或类似这样的东西:

SELECT state, min(city), min(lat), . . .
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

但是这SELECT *是不允许的,并且没有任何意义。



 类似资料:
  • 问题内容: 我有如下的SQL: 并得到结果: 我想总结每个部门的学生人数,如下所示: 我该如何编写sql? 问题答案: 尽管您似乎并未显示所有表格,但我只能假设还有每位学生的实际入学表格 如果您想要与每个学生相关联的每个部门的总数(这没有意义),则可能必须这样做… 我对“姓名”列的解释是学生的姓名,而不是班级实际讲师的姓名,因此,我进行子选择/加入。否则,就像其他人一样,只需要使用COUNT(*)

  • 问题内容: 我明白这一点。 但是,它是如何工作的,又意味着什么呢? 问题答案: 意味着 将所有具有相同X值的那些放在一组 。 意味着 将所有具有相同X和Y值的那些放在一组中 。 为了举例说明,假设我们有一个下表,该表与谁在大学里修读什么科目有关: 仅在主题列上使用a时;说: 您将获得类似以下内容的信息: …因为ITB001有5个条目,MKB114有2个条目 如果我们要到两列: 我们会得到这个: 这

  • 问题内容: 我正在尝试向先前存在的应用程序中添加功能,并且遇到了如下MySQL视图: 好,所以有一些聚合函数。您可以选择personID,因为您正在对其进行分组。但是它还会选择不在聚合函数中并且不属于GROUP BY子句的列。这怎么可能???它是否只是选择一个随机值,因为每个组中的值肯定不是唯一的? 我来自(MSSQL Server),那是一个错误。有人可以向我解释此行为以及为什么它在MySQL中

  • 我遇到了以下问题, 您将获得一个包含 n 个元素的数组 A。这些元素现在被添加到一个新的列表L中,该列表最初是空的,根据给定的q查询以一定的顺序排列。 在每个查询中,都会为您提供一个与数组A中的A[i]对应的整数i。这意味着您必须将元素A[i】添加到列表L中。 将每个元素添加到列表L后,对列表L中的元素进行分组。如果数组A中的索引是连续的,则两个元素将属于同一组 对于每个组,我们将组的值定义为ax

  • 问题内容: 如何在PostgreSQL中定义一列,以使每个值都必须按顺序排列,而不是使用类型时获得的顺序,而不能使值2插入,除非该列中已存在值1才能插入该值? 问题答案: 从理论上讲,您可以使用像这样工作的约束。(但是实际上它是行不通的。) 计算行数。 评估。 比较结果。 在创建CHECK约束之前,您可能必须插入一行。如果您不这样做,则max(column)将返回NULL。一排 计算行数(1)。

  • 问题内容: 如该问题所述,我试图制定一个查询,该查询在列结果中包含一个case语句,然后我想将该列包含在查询的group by语句中。举一个具体的例子,这几乎是我查询的样子: 在来到这里之前,我检查了一些网站,包括该网站,以尝试解决我的问题。我尝试在链接的网页中显示“ like”之后添加另一个别名,但是没有运气。我继续收到的错误消息如下: 是否还有其他人遇到我所面临的问题,并且能够在声明的结果上使