同样的语句在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 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】

3 个赞

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

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
1 个赞

也是特殊情况

sql引擎不同

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