首页 > 解决方案 > 获取字段的唯一值并打印其长度

问题描述

表名:工人,

Fields : worker_id | first_name | last_name | department

我有一个表名 worker,我想编写一个 SQL 查询,从 Worker 表中获取 DEPARTMENT 的唯一值并打印它的长度。所以我试着运行这个:(数据库-Mysql)

select length(distinct(department)) from worker;

但它给出了一个错误说:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'distinct(department)) from worker' 附近使用正确的语法

但是当我在下面运行查询时,它工作得很好:

select distinct(length(department)) from worker;

有人可以解释一下为什么交换 distinct 和 length 函数可以使查询起作用吗?

提前致谢!

标签: mysqlsql

解决方案


Distinct 不是一个函数而是一个子句

 select  distinct length(department) from worker;

无论如何,在 MySQL 中也可以使用函数语法

  select  distinct( length(department)) from worker;

带有交换令牌的代码不起作用,因为 DISTINCT 产生了一个聚合结果,删除了重复的值,这意味着外部 length() 函数在不正确的行集上工作,或者更好的是 db 引擎看到不正确使用DISTINCT 子句并引发语法错误

select length( distinct 'A'  )  this raise an error 

如果你想使用外部 length() 函数,你应该这样编码

select length(my_col) from (
 select distinct department  my_col from worker
) ;

推荐阅读