查询就像..
select deviceid,devicename,totalbytes,'Others' as protocolgroup from (
select d.deviceid,d.name as devicename,sum(bytes) as totalbytes from tblmainallowedtraffic_5min b,tbldevice d
WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM') )
and proto_group not in (select proto_group from (select proto_group,sum(bytes) from
TBLMAINALLOWEDTRAFFIC_5MIN B WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A',
'C026100710-36NPQE','C016801597-V1Z8IM') ) AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND
"5mintime" <='04-APR-12 11.59.59.000000 PM' group by proto_group order by sum(bytes) desc ) WHERE ROWNUM <=5 )
AND B.APPID=D.APPID AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND "5mintime" <='04-APR-12 11.59.59.000000 PM'
GROUP BY D.APPID,D.DEVICEID,D.NAME)
order by protocolgroup desc, totalbytes desc
在解释计划中说它......
3 - 过滤器(NOT EXISTS(不可行))
如果我用静态内部查询结果更改上述查询,输出会更快:
select deviceid,devicename,totalbytes,'Others' as protocolgroup from (
select d.deviceid,d.name as devicename,sum(bytes) as totalbytes from tblmainallowedtraffic_5min b,tbldevice d
WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM') )
and proto_group not in ('POP3','HTTP Request Response','Web','GET HTTP DATA MORE THAN 976 KB','SMTP' )
AND B.APPID=D.APPID AND "5mintime" >='04-APR-12 12.00.00.000000 AM' AND "5mintime" <='04-APR-12 11.59.59.000000 PM'
GROUP BY D.APPID,D.DEVICEID,D.NAME)
order by protocolgroup desc, totalbytes desc
所以not exists子句在同一个表上应用会产生问题。
你能对此有所了解吗?
答案 0 :(得分:0)
编辑:新答案:
尝试进行反连接:
SELECT deviceid,
devicename,
totalbytes,
'Others' AS protocolgroup
FROM
(SELECT d.deviceid,
d.name AS devicename,
SUM(bytes) AS totalbytes
FROM tblmainallowedtraffic_5min b,
tbldevice d
LEFT OUTER JOIN
(SELECT proto_group
FROM
(SELECT proto_group,
SUM(bytes)
FROM TBLMAINALLOWEDTRAFFIC_5MIN B
WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A', 'C026100710-36NPQE','C016801597-V1Z8IM') )
AND "5mintime" >='04-APR-12 12.00.00.000000 AM'
AND "5mintime" <='04-APR-12 11.59.59.000000 PM'
GROUP BY proto_group
ORDER BY SUM(bytes) DESC
)
WHERE ROWNUM <=5
) e ON b.proto_group = e.proto_group
WHERE ( B.APPID IN ('C070100126-VW717U','C018600068-GEF3O6','C045701665-9B6S1A','C026100710-36NPQE','C016801597-V1Z8IM') )
AND e.proto_group is null
AND B.APPID =D.APPID
AND "5mintime" >='04-APR-12 12.00.00.000000 AM'
AND "5mintime" <='04-APR-12 11.59.59.000000 PM'
GROUP BY D.APPID,
D.DEVICEID,
D.NAME
)
ORDER BY protocolgroup DESC,
totalbytes DESC