我正在尝试使用以下条件从Oracle数据库表中检索数据
为了满足上述条件,我编写了如下查询
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查询混合使用。