mysql - 获取字段的唯一值并打印其长度
问题描述
表名:工人,
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 函数可以使查询起作用吗?
提前致谢!
解决方案
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
) ;
推荐阅读
- git - 尝试使用 SSH 身份验证从 Google Cloud Source Repositories 克隆 repo
- swift - 如何将 indexPath 数组拆分为单独的 indexPath 数组,每个数组的 indexPath 具有相同的 indexPath.section
- jenkins - 从 Jenkinsfile 的另一个阶段调用环境变量
- regex - 使用正则表达式捕捉莎士比亚角色的对话
- date - 如何显示格式日期:dd/MM/yyyy 10:05 pm
- amazon-web-services - 有没有办法在 AWS kenesis 中创建类似 Kafka 的主题?
- ios - 类型'NSError'在swift 4中没有成员'errorWith'?
- html - 浏览器鼠标按下(并按住)然后将光标对象拖出边界,对象边框变为蓝色,我该如何控制?
- kubernetes - Kubernetes pod 无法访问外部 IP 地址
- react-native - 在 react-native 中保持用户身份验证的最佳方法