sql – 为什么Oracle不是说GROUP BY表达式?

我正在尝试使用以下条件从Oracle数据库表中检索数据

> zip-code找到的所有条目都应按照邮政编码降序进行分组.
>按城市找到的条目应按字母顺序进行分组.
>所有由dealername找到的条目应按字母顺序分组.

为了满足上述条件,我编写了如下查询

SELECT disTINCT ba.uuid AS uuid,COUNT(*) over() AS rowcount 
FROM basicaddress ba 
WHERE ba.postalcode='143456' 
OR ba.lastname LIKE '%143456%' 
OR ba.city LIKE '%143456%'
GROUP BY
    CASE WHEN ba.postalcode='143456' THEN ba.postalcode END 
ORDER BY 
    CASE WHEN ba.postalcode='143456' THEN ba.postalcode END DESC,CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname END ASC,CASE WHEN ba.city LIKE '%143456%' THEN ba.city ELSE ba.postalcode END DESC

这个查询MysqL中运行正常,但在oracle中它说“不是GROUP BY表达式”

任何帮助将不胜感激

解决方法

这只是因为MysqL破坏了sql的逻辑.

假设我们有表emp:

id ename dept
1  mark  10
2  John  10
3  Mary  10
4  Jane  20

查询

select dept,ename
from emp 
group by dept;

你会得到什么?
你应该得到两行,因为有两个部门,但查询要求ename.对于20是明确的但是10发动机应该返回什么?

它会回复错误.无法猜出要给予什么.
Oracle发出错误 – 你的错误,但MysqL得到了一个ename(不保证是哪个).
这是误导性的,可能会导致错误.

正确的查询将是:

select dept,max(ename) --the latest,alaphabeticaly
from emp 
group by dept;

--all enames and groups
select dept,ename 
from emp 
group by dept,ename;

更正此部分后,您必须解决此问题

COUNT(*) over() AS rowcount

部分.在oracle,AFAIK中,您不能将分析函数与group by query混合使用.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...