PostgreSQL中COUNT(1)与DISTINCT顺序不同触发语法错误原因问询
问题原因
你第一个查询无法运行属于SQL编写不符合语法规范导致的操作错误,核心问题如下:
DISTINCT关键字的使用位置不符合要求:它要么放在SELECT之后作为整行去重的修饰符作用于所有返回列,要么只能放在聚合函数内部作为参数(比如COUNT(DISTINCT name)用来统计去重后的name数量),不能出现在SELECT子句的中间位置、放在普通列前面单独修饰某一列。你写的SELECT COUNT(1), DISTINCT(name)中DISTINCT出现在逗号之后,数据库解析时无法识别该语法结构,因此直接抛出解析失败的报错。- 即使忽略语法问题,你的写法逻辑也有冗余:统计每个name的出现次数时,只要使用
GROUP BY name就能自动按name分组,返回的name天然是去重的,完全不需要额外加DISTINCT关键字。你第二个查询能跑通只是因为数据库解析时默认把你写的DISTINCT(name)识别为普通的name列(多余的DISTINCT刚好放在SELECT最开头位置没有触发语法报错),实际生效的是后面的GROUP BY逻辑。
标准写法推荐
更易读、无冗余的正确写法如下:
SELECT name, COUNT(1) FROM table GROUP BY name
内容的提问来源于stack exchange,提问作者Jonas Palačionis
相关产品推荐
相关产品推荐

