【发布时间】:2020-06-28 13:15:53
【问题描述】:
Based on the documentation,ClickHouse(与 MySQL 不同)要求 SELECT、HAVING 和 ORDER BY 子句中的所有表达式都根据键或聚合函数计算。
有时我们只需要让场外的团队,但仍将其他人分组。我知道这样做的利弊。
我知道要获得类似 MySQL 的行为,您可以将其他列放在任何聚合函数中。
我试图在 sql_mode (MySql) 之类的 SETTINGS 上找到来改变这种行为。我知道我们可以使用 any 功能,但默认情况下启用此设置会更容易。
【问题讨论】:
-
为什么
ANY()聚合函数这么难用?它使您的代码对以后必须维护它的人来说更加清晰。允许来自分组查询的非严格结果可能会导致困难的调试情况。我建议您允许默认的sql_mode强制执行标准语义。 ClickHouse 行为正确。 -
我的应用程序在后台为用户构建 CH sql,同时该用户拖动字段/计算列。有时,当我们必须根据用户想要构建的内容来决定对什么进行分组/排序时,这并不容易!
-
我很抱歉。我忘记了 MySQL 没有
ANY()函数(参见Aggregate Function Descriptions)。不过,您不应允许用户创建结果不明确的查询。
标签: mysql clickhouse