UCanAccess 分组依据

UCanAccess Group By

需要学习如何使用 UCanAccess,我可以在这些选择中使用分组依据。

 String sql =  "SELECT Route_To, BatchNo, BatchScOpr, BatchTrack, Time_Stamp,
 sum(fix_bat_sum.STOTS + fix_bat_sum.STOTR) AS Sum
 FROM fix_bat_sum GROUP BY fix_bat_sum.BatchNo";

我将它与 MySQL 数据库一起使用,它工作正常,但是当我尝试使用 .mdb UCanAccess 时,它会抛出这样的空指针错误

java.sql.SQLSyntaxErrorException: expression not in aggregate or GROUP BY columns: PUBLIC.FIX_BAT_SUM.ROUTE_TO

希望得到一些帮助

您必须在 GROUP BY 子句中列出所有非聚合列。

GROUP BY Route_To, BatchNo, BatchScOpr, BatchTrack, Time_Stamp

MySQL 比其他数据库更宽松,尽管默认值在 MySQL 5.7.

中发生了变化

MySQL 为允许处理查询的 GROUP BY 提供非标准扩展。

通过在 sql_mode 中包含 ONLY_FULL_GROUP_BY,我们可以使 MySQL 表现出与其他关系数据库类似的行为。这样一来,MySQL 将 return 一个类似于 return 由其他 RDBMS 编辑的错误。

有关行为的解释,请参阅 MySQL 参考手册:

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html


"aggregate expression" 指的是聚合函数之一的结果,例如 MAX()MIN()AVG() 对一组行进行运算以 return 单个值。

作为问题的简单示例:

foo  bar
---- ----
1    a
1    b
3    c
1    d

使用此查询

SELECT foo, bar FROM mytable GROUP BY foo 

GROUP BY 子句将导致行集 "collapsed"。请注意,对于 foo=1,有 三个 可能的值可以 returned 用于 bar。应该 return 编辑哪些值?

如果我们指定 MAX(bar)MIN(bar) 代替 bar,我们就是在指定 return 的值。如果没有聚合,结果将是不确定的。 MySQL可以选择return三个值中的任意一个。

SQL 的标准行为是拒绝查询。