首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >聚合不能出现在WHERE子句中,除非它在

聚合不能出现在WHERE子句中,除非它在
EN

Stack Overflow用户
提问于 2017-06-26 17:53:49
回答 1查看 5.3K关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
复制
select 
    * 
from sap_stockmaster 
where itemid=9893 
and salemrp=1034.00 
and salemrp in(
    select 
        salemrp 
    from sap_stockmaster 
    where SUM(stkqty)>0
) 
order by salemrp desc

我要记录其数量之和大于零的记录,但得到以下错误

聚合可能不会出现在WHERE子句中,除非它位于包含在HAVING子句或select列表中的子查询中,并且正在聚合的列是外部引用。

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 17:56:54

在对聚合进行筛选时,应该使用having而不是where

代码语言:javascript
代码运行次数:0
运行
复制
select * 
from sap_stockmaster 
where itemid=9893 
and salemrp=1034.00 
and salemrp in (select salemrp 
    from sap_stockmaster 
    group by salemrp
    HAVING SUM(stkqty)>0) 
order by salemrp desc

而且,这可能是以联接或使用存在的形式编写的更多的表演性。

代码语言:javascript
代码运行次数:0
运行
复制
-- example with Exists

SELECT * 
FROM sap_stockmaster ss1
WHERE itemid=9893 
AND salemrp=1034.00 
AND EXISTS (SELECT 1 
    FROM sap_stockmaster ss2
    WHERE ss1.salemrp = ss2.salemrp
    GROUP BY ss2.salemrp
    HAVING SUM(ss2.stkqty)>0)
ORDER BY salemrp DESC
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44765693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档