sql - DISTINCT 没有给出预期的结果
问题描述
ID FirstName LastName Gender Salary
1 Ben Hoskins Male 70000
2 Mark Hastings Male 60000
4 Ben Hoskins Male 70000
8 John Stanmore Male 80000
运行查询时:
select *
from Employees
where Salary > (SELECT AVG(distinct SALARY) FROM employees)
它显示 2 条记录 7000 它应该显示一条。如果我使用了 distinct,为什么它会显示 2 条记录?
解决方案
看起来您在表中有重复的行(仅由它们的 不同id
),所以我将假设您想要distinct
超过姓名、性别和薪水,而不仅仅是薪水。
您似乎同时需要distinct
外部和内部查询:
select distinct firstname, lastname, gender, salary
from employees
where salary > (
select avg(salary)
from (
select distinct firstname, lastname, gender, salary
from employees
) e
)
如果您的数据库支持窗口函数,则可以缩短:
select *
from (
select e.*, avg(salary) over() as avg_salary
from (
select distinct firstname, lastname, gender, salary
from employees
) e
) e
where salary > avg_salary
推荐阅读
- python - 美汤刮-取空集
- r - 总结一个col并将最后一个索引处的值存储在R中的一个新列中
- graph - 用于绘制逻辑门和功能块的脚本语言
- javascript - 单击 Chrome 中的后退按钮会影响我在跨域 iframe 中的 Vue 应用程序,而不是原始页面
- javascript - 如何通过 URL 读取可以通过 URL 下载的文件
- python - Python 保存 3100 万行 80 列的数据框
- go - gRPC:基于每个 RPC 对 API 进行速率限制
- reactjs - 无法为范围注册 ServiceWorker - 脚本具有不受支持的 MIME 类型 ('text/html')
- javascript - 如何全局自定义错误消息 vee-validate
- android - 如何更改为 Android Studio 添加 java 类的设置