加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2020-12-24 20:26:23 所属栏目:编程 来源:网络整理
导读:我正在实行行使以下前提从Oracle数据库表中检索数据 zip-code找到的全部条目都应凭证邮政编码降序举办分组. 按都市找到的条目应按字母次序举办分组. 全部由dealername找到的条目应按字母次序分组. 为了满意上述前提,我编写了如下查询 SELECT DISTINCT ba.uuid

我正在实行行使以下前提从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殽杂行使.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读