【问题标题】:How to fix "Inner Join Group-By" question [duplicate]如何解决“Inner Join Group-By”问题[重复]
【发布时间】:2019-05-20 19:47:23
【问题描述】:

尝试运行查询以取消重复行。目前,在运行此脚本时,我从 Oracle 收到一条错误消息

“ORA-00979:不是 GROUP BY 表达式”

尝试删除不同的选择行。

SELECT QUEUE_NAME, ITEMS_IN_QUEUE, CREATION_USR_ID
  FROM IN_WF_QUEUE B
  INNER JOIN IN_WF_ITEM A
     ON A.QUEUE_ID = B.QUEUE_ID    
    AND B.QUEUE_NAME LIKE '__________ %'       
    AND (A.QUEUE_START_TIME < (select sysdate from DUAL)-1000)    
  GROUP BY B.QUEUE_ID;

提前感谢您对此问题的任何帮助。

【问题讨论】:

  • 提示:GROUP BY 中有一个列,SELECT 中有三个未聚合的列。
  • (显然,)这是一个常见问题。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。在您使用它们之前以及在您询问有关使用它们的问题之前,请阅读介绍/手册以了解您使用的语言的各个部分。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)

标签: sql oracle group-by inner-join


【解决方案1】:

如果要删除重复项,为什么不使用DISTINCT?这比在没有任何聚合的情况下使用 GROUP BY自然

SELECT DISTINCT
       queue_name, items_in_queue, creation_usr_id
  FROM in_wf_queue b
  INNER JOIN in_wf_item A
     ON A.queue_id = b.queue_id    
    AND b.queue_name LIKE '__________ %'       
    AND A.queue_start_time < sysdate - 1000;

另外,不需要从 dual 中选择 SYSDATE;它是一个可以独立使用的函数,就像我的例子一样。请注意,它同时返回日期和时间,所以 - 也许您想通过截断时间组件来删除它,即使用 trunc(sysdate)。减去 1000 表示“1000 days 前”;只是说,以避免可能的混淆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多