代码之家  ›  专栏  ›  技术社区  ›  Vinay Ranjan Shukla

使用max(column1)打印行中的column2,但不在group by子句中包含column2

  •  0
  • Vinay Ranjan Shukla  · 技术社区  · 7 年前

    我知道这是一个愚蠢的问题,可能已经在某处得到了回答,如果是,请引导我到链接。

    我想打印未包含在group by子句中的列。Oracle说它应该包含在group by表达式中,但我希望值来自为另一列选择max()值的同一行。

    例如:如果我有一个包含以下列的表:

    Employee\u Name、Action\u code、Action\u Name

    我想查看每个员工的最大action\u代码的操作名称,并且我不能在条件中使用子查询。

    我想要这样的东西:

    select employee_name, max(action_code), action_name --for max code
    from emp_table
    group by employee_name
    

    action\u名称 在select语句中,如果我在group by子句中添加action\u name,那么它将为每个员工的每个操作显示操作名称,这将使查询变得毫无意义。

    感谢您的支持

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Poole    7 年前

    您可以使用 keep .. last pattern :

    select employee_name,
      max(action_code) as action_code,
      max(action_name) keep (dense_rank last order by action_code) as action_name
    from emp_table
    group by employee_name
    

    文档在sister函数下对此进行了更全面的解释 first() .