你正在查看 TiDB 数据库的归档文档,归档文档不再提供任何更新。如无特殊需求,建议使用 TiDB 数据库的最新 LTS 版本。
除非另有说明,否则聚合函数默认忽略 NULL 值。
如果在不包含 GROUP BY 子句的语句中使用聚合函数,则相当于对所有行进行分组。
TiDB 支持 SQL 模式 ONLY_FULL_GROUP_BY,当启用该模式时,TiDB 拒绝不明确的非聚合列的查询。例如,以下查询在启用 ONLY_FULL_GROUP_BY 时是不合规的,因为 SELECT 列表中的非聚合列 "b" 在 GROUP BY 语句中不显示:
要对结果进行排序,必须先清除重复。但选择保留哪一行会影响 c 的保留值,也会影响排序,并使其具有任意性。
在 MySQL 中,ORDER BY 表达式需至少满足以下条件之一,否则 DISTINCT 和 ORDER BY 查询将因不合规而被拒绝:
表达式等同于 SELECT 列表中的一个。
表达式引用并属于查询选择表的所有列都是 SELECT 列表的元素。
例如:以下查询返回在 orders 中只出现一次的 name 值:
这个 TiDB 扩展允许在聚合列的 HAVING 子句中使用别名:
TiDB 对标准 SQL 的扩展支持 GROUP BY 子句中非列表达式,认为上述语句合规。
标准 SQL 也不支持 GROUP BY 子句中使用别名。TiDB 对标准 SQL 的扩展支持使用别名,查询的另一种写法如下:
TiDB 目前不支持的聚合函数如下所示,相关进展参阅 TiDB #7623。