【问题标题】:Not a Group by expression error [joining tables]不是按表达式分组的错误[连接表]
【发布时间】:2018-07-06 16:13:55
【问题描述】:

当我尝试获取按不同主题名称和员工姓名分组的最大价值列时,通过不工作进行分组。

第一个大括号内的选择查询工作正常,我从中得到了所需的输出。但是,我无法从每个员工身上获得最大价值。

select  staff_name, subject_name, max(value) from 
(select Staff.staff_name, Subject.subject_name, Mark.value as value 
from ((staff inner join subject on Staff.staff_id=Subject.staff_id)
inner join Mark ON Mark.subject_id=Subject.subject_id) 
group by subject_name);

错误是:

ORA-00979: not a GROUP BY expression

【问题讨论】:

  • 所有非聚合列必须在GROUP BY 中。在这种情况下,您也必须将staff_name 放入您的GROUP BY

标签: sql database oracle oracle11g


【解决方案1】:

您的嵌套 () 似乎顺序错误 并且您错过了 group by 中未聚合的列

select  t.staff_name, t.subject_name, max(t.value) 
from (
    select Staff.staff_name, Subject.subject_name, Mark.value as value 
    from staff 
    inner join subject on Staff.staff_id=Subject.staff_id
    inner join Mark ON Mark.subject_id=Subject.subject_id
) t
group by t.staff_name, t.subject_name;

【讨论】:

  • 就此而言,子查询嵌套是不必要的,除非查询与 OP 实际发布的非常不同。
【解决方案2】:

看起来你只需要这个:

select st.staff_name, su.subject_name, max(mk.value) 
from   staff st
       join subject su
            on  su.staff_id = st.staff_id
       join mark mk
            on  mk.subject_id = su.subject_id
group by st.staff_name, su.subject_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2010-12-03
    • 2020-03-17
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2021-05-27
    相关资源
    最近更新 更多