不是组表达式:对 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
表达式只是取每个组的最小值z
,MIN(z)
之间的唯一区别是如果值是N/A
,它将被视为abc
。
【讨论】:
以上是关于不是组表达式:对 Oracle 查询进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章