首页 > 解决方案 > 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 条记录?

标签: sqlsubqueryaverageaggregate-functionsdistinct

解决方案


看起来您在表中有重复的行(仅由它们的 不同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

推荐阅读