不是组表达式:对 Oracle 查询进行故障排除

Posted

技术标签:

【中文标题】不是组表达式:对 Oracle 查询进行故障排除【英文标题】:Not a group expression: troubleshooting an Oracle query 【发布时间】:2019-06-28 04:41:18 【问题描述】:

Oracle 查询 我有一个带有硬编码值“N/A”和其他字符值的列值。我需要编写一个选择查询来获取将另一组列分组的该列的最小值。但挑战是我需要用另一个字符“Abc”和 min 函数替换“N/A”的硬编码值

选项 1:nvl 不起作用,因为该值是硬编码的 选项 2:在 select 语句中解码以及解码列表中的 min 子句,以及 group by 子句与选择列表中使用的其他列 然而,得到一个错误

ORA-00979:不是组表达式。

例子:

Select a, b, decode(z,'N/A','abc',min(z)) 
  From table 1, table 2
 Where table 1.p=table2.q
 Group by a,b
Having c.table1 >= table2.d

【问题讨论】:

【参考方案1】:

您应该在MIN 函数中使用DECODE,而不是相反。但是,我可能会在这里只使用一个 CASE 表达式:

SELECT
    a,
    b,
    MIN(CASE WHEN z = 'N/A' THEN 'abc' ELSE z END) AS min_value
FROM table1 t1
INNER JOIN table2 t2
    ON t1.p = t2.q
GROUP BY
    a,
    b;

上面的CASE 表达式只是取每个组的最小值zMIN(z) 之间的唯一区别是如果值是N/A,它将被视为abc

【讨论】:

以上是关于不是组表达式:对 Oracle 查询进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章

Oracle多关键字查询

Oracle:使用正则表达式从查询中排除结果

Oracle ASM故障数据恢复

如何对 Snowpipe 自动摄取故障进行故障排除?

Oracle ASM故障数据恢复解决方案

对冻结的 php 脚本进行故障排除