mysql 获取字段的唯一值并打印其长度

twh00eeo  于 2023-01-08  发布在  Mysql
关注(0)|答案(4)|浏览(118)

表名:工人,

Fields : worker_id | first_name | last_name | department

我有一个名为worker的表,我想写一个SQL查询,从Worker表中获取DEPARTMENT的唯一值并打印其长度。(数据库-Mysql)

select length(distinct(department)) from worker;

但它给出了一个错误消息:
错误1064(42000):SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第1行中使用"distinct(department))from worker"附近的正确语法
但是当我运行下面的查询时,它工作得非常好:

select distinct(length(department)) from worker;

有人能解释一下为什么把distinct和length函数互换可以使查询正常工作吗?
先谢了!

9lowa7mx

9lowa7mx1#

尽量不要使用distinct like function but子句,否则会给予语法错误.
下面的sql语句将执行如下所示:

select distinct (length('xyz'))  ---- length('xyz') : 3
select distinct (3)  ---- output : 3
dwbf0jvd

dwbf0jvd2#

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

select  distinct length(department) from worker;

无论如何,在MySQL工作也与函数语法

select  distinct( length(department)) from worker;

由于DISTINCT生成的聚合结果删除了重复值,因此带有交换标记的代码无法工作,这意味着outer length()函数对不正确的行集起作用,或者更好的情况是,数据库引擎发现DISTINCT子句使用不当并引发语法错误

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

如果要使用outer length()函数,则应按以下方式编写代码

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

58wvjzkj3#

select  distinct( length(department)),department from worker group by department;
jm2pwxwz

jm2pwxwz4#

从Worker中选择distinct(部门)作为“唯一部门”,len(部门)作为“名称长度”;

相关问题