Vim*_*987 0 database oracle plsql aggregate
鉴于我有一个包含用户数据的表,如下所示:
userID calltime result
1 10:20 1
1 11:00 2
1 11:30 1
2 9:30 1
2 11:00 1
3 10:00 1
3 10:30 2
3 11:00 1
3 11:30 2
Run Code Online (Sandbox Code Playgroud)
现在我想这样总结一下:
userID result1 result2
1 2 1
2 2 0
3 2 2
(total) 6 3
Run Code Online (Sandbox Code Playgroud)
对我来说,总结用户数据很好,但是如何在查询中添加总行?UNION不适用于此.
非常感谢你做的这些.
编辑:这是我当前的查询,当然,它不起作用:
PROCEDURE P_SUMMARIZE_CALL
(
pStartDate IN DATE,
pEndDate IN DATE,
SummaryCur OUT MEGAGREEN_CUR
)
IS
BEGIN
OPEN SUMMARYCUR FOR
SELECT USERID, TOTALCALLS,CONNECTEDCALLS,RATE,NOANSWER FROM
(((SELECT USERID,
count(CALLID) AS TOTALCALLS,
sum(CONNECTED) as CONNECTEDCALLS,
sum(CONNECTED)/count(CALLID)*100 || '%' AS RATE,
(count(CALLID) - sum(CONNECTED)) AS NOANSWER
FROM CALLLOGS
WHERE STARTTIME BETWEEN pStartDate AND pEndDate
group by USERID) c
FULL OUTER JOIN USERS u
ON c.USERID = u.ID)
UNION ALL
(SELECT NULL,count(CALLID) AS TOTALCALLS,
sum(CONNECTED) as CONNECTEDCALLS,
sum(CONNECTED)/count(CALLID)*100 || '%' AS RATE,
(count(CALLID) - sum(CONNECTED)) AS NOANSWER
FROM CALLLOGS
WHERE STARTTIME BETWEEN pStartDate AND pEndDate group by NULL));
END;
Run Code Online (Sandbox Code Playgroud)
我假设您正在使用GROUP BY生成当前结果.(PS:请发布您当前的查询,因为很难猜测您正在做什么来获得该结果).
要获得所需内容,请使用GROUP BY ROLLUP而不是GROUP BY.
UNION不适用于此.
是的,实际上这也会奏效.但我建议UNION ALL而不是UNION,因为你的结果集似乎已经只包含不同的行,所以没有必要使用额外的计算时间来搜索要删除的重复行.