同样的语句在oceanbase中执行报错,但mysql和oracle中都是正常的

【 使用环境 】测试环境
【 OB or 其他组件 】oceanbase-MySQL
【 使用版本 】5.7.25-OceanBase_CE-v4.3.5.2
【问题描述】同样的sql语句,在mysql和oracle中是正常的,但oceanbase中报错
sql语句:select count(0) from table_a order by column_a
报错信息:1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),…) with no GROUP columns is illegal if there is no GROUP BY clause

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】

5 个赞

image
本地测试使用442版本是正常查询的

2 个赞

@论坛小助手

1 个赞

在OceanBase中,当SQL语句中使用聚合函数(如COUNT())并且没有GROUP BY子句时,不允许混合使用非聚合列(如ORDER BY column_a)。这是OceanBase为了确保查询结果的确定性和一致性而采取的一种严格检查。在MySQL和Oracle中,这种查询可能被允许,但在某些情况下可能导致不确定的结果。

针对您的SQL语句 select count(0) from table_a order by column_a,您可以考虑以下两种解决方案之一:

  1. 如果您不需要按column_a排序,可以移除ORDER BY子句:
select count(0) from table_a;
  1. 如果确实需要按column_a排序,可以使用子查询来实现:
select * from (select count(0) as cnt, column_a from table_a group by column_a) t order by t.column_a;

这样可以确保查询在OceanBase中正确执行。

详情请参考:

  1. 0001 ~ 3999
2 个赞

也是特殊情况

1 个赞

sql引擎不同

1 个赞

都count了,为啥还要加order by呢,order by没意义了啊

这个问题涉及到column和select的平衡,根据我的经验,适当调整from会有帮助。

1 个赞

java使用了mybatis和pagehelper组件,根据参数确认是否拼接order by ,在分页查询中,第一步查询总数时,构建的sql就是类似于题中的sql,拼接了order by的

1 个赞

是题中的版本吗?如果不是,那能确认是哪个版本开始支持这种的吗?

1 个赞

sql模式不一样吧

支持支持

666