首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在非聚合查询中嵌入聚合查询

在非聚合查询中嵌入聚合查询
EN

Stack Overflow用户
提问于 2013-11-21 13:38:54
回答 3查看 76关注 0票数 1

我正在尝试创建一个数据库视图,该视图具有对列值的聚合查询的结果(关于所使用的聚合查询,请参见this post ),例如

代码语言:javascript
复制
MESSAGEVIEW
----------------------------------------------
MESSAGEID    SENDER       PARTCOUNT        
----------------------------------------------
1            Tim          2
2            Bridgekeeper 0

我尝试过以下选择视图数据的代码:

代码语言:javascript
复制
SELECT m.MESSAGEID, m.SENDER,
    (SELECT COUNT(mp.MESSAGEID)
         FROM MESSAGE m LEFT JOIN MESSAGEPART mp
         ON mp.MESSAGEID = m.MESSAGEID GROUP BY m.MESSAGEID) AS PARTCOUNT
    FROM MESSAGE m;

返回ORA-01427: single-row subquery returns more than one row

我也试过

代码语言:javascript
复制
SELECT m.MESSAGEID, m.SENDER, COUNT(mp.MESSAGEID) AS PARTCOUNT
FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID 
GROUP BY m.MESSAGEID;

返回ORA-00979: not a GROUP BY expression

如何才能获得正确显示这些信息的视图?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-21 13:41:35

这样就行了。

代码语言:javascript
复制
SELECT m.MESSAGEID, m.SENDER,
    (SELECT COUNT(mp.MESSAGEID)
         FROM MESSAGEPART mp
         WHERE mp.MESSAGEID = m.MESSAGEID) AS PARTCOUNT
    FROM MESSAGE m;
票数 1
EN

Stack Overflow用户

发布于 2013-11-21 13:58:16

您可以使用子查询(请参阅@Jva答案)或使用以下联接来完成此操作:

代码语言:javascript
复制
SELECT m.MESSAGEID, m.SENDER,
       mp.PartCount AS PARTCOUNT

       FROM MESSAGE m
           LEFT JOIN 
             (SELECT MESSAGEID,COUNT(*) as PartCount 
                     FROM MESSAGEPART GROUP BY MESSAGEID) as mp 
             ON m.MESSAGEID=mp.MESSAGEID
票数 1
EN

Stack Overflow用户

发布于 2013-11-21 14:48:38

如果在窗口函数格式中使用count(),则可以将其放入一个没有子查询的查询中:

代码语言:javascript
复制
SELECT m.MESSAGEID, m.SENDER, COUNT(mp.MESSAGEID) OVER (PARTITION BY m.MESSAGEID) AS PARTCOUNT
FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20122523

复制
相关文章

相似问题

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