我正在尝试使用以下条件从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混合使用.
原文地址:https://www.jb51.cc/mssql/80489.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。