【问题标题】:ORA-00979 : select distinct(concat column) not a group by expressionORA-00979: 选择 distinct(concat column) 不是按表达式分组
【发布时间】:2022-02-09 20:30:09
【问题描述】:

我通过以下查询得到 ORA-00979:

SELECT 
 DISTINCT ((colA || SUBSTR(colB, 1, 2))) AS colA 
FROM myTable 
WHERE colC='5678'
GROUP BY colA

我有一个名为 myTable 的表,其中包含三列(colA、colB 和 colC)。
我想在我的选择结果中包含:列 colA 值和列 colB 的两个第一个值的串联。此外,我想按我的结果分组。但是,我收到 ORA-00979 而不是按表达式分组的错误。
我该如何解决这个问题?

【问题讨论】:

  • 我不知道你想做什么。向我们展示一些示例表数据和预期结果 - 全部作为格式化文本(不是图像)。即minimal reproducible example.
  • 没有聚合的情况下为什么要分组?你期望你展示的分组做什么,不同的(这不是一个函数,顺便说一句,所以不需要括号)还没有为你实现?没有数据和结果,就不清楚你想做什么,或者为什么。

标签: sql oracle ora-00979


【解决方案1】:

您可以在GROUP BY 子句中重复出现在SELECT 中的整个表达式:

SELECT DISTINCT colA || SUBSTR(colB, 1, 2) AS colA
FROM myTable
WHERE colC = '5678'
GROUP BY colA || SUBSTR(colB, 1, 2);

Oracle 不支持使用别名或使用12 等位置参数进行分组。请注意,DISTINCT 不是 SQL 函数。

【讨论】:

  • 好吧,在这种情况下,您要么不需要 DISTINCT(因为 GROUP BY 无论如何都会区分它们),或者你不需要 GROUP BY(因为 DISTINCT 会返回 distinct 行集)。也许我不明白(你在说什么),但是......我会说这并没有达到 OP 想要的效果。他们想要什么?这也是个好问题:)
  • 你说得对……DISTINCT 是多余的。并且在选择中没有任何聚合,GROUP BY 也是毫无意义的。我会让OP发表评论。无论如何,我在这里修复了编译器错误。
猜你喜欢
  • 2011-05-25
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2021-05-27
  • 2013-03-29
相关资源
最近更新 更多