这样试试,可能不太好,但能得到结果,应该用分析函数可以实现的。。select virusname,srcip,VirusTotal,DstIPCount from (
select virusname,virusname virus,'' srcip,count(rowid) VirusTotal,count(distinct DstIP) DstIPCount from aa group by virusname
union all
select '' virusname,VirusName virus,SrcIP,count(rowid) VirusTotal,count(distinct DstIP) DstIPCount
from aa group by VirusName,SrcIP)
order by virus,virustotal desc;
select virusname,virusname virus,'' srcip,count(rowid) VirusTotal,count(distinct DstIP) DstIPCount from aa group by virusname
union all
select '' virusname,VirusName virus,SrcIP,count(rowid) VirusTotal,count(distinct DstIP) DstIPCount
from aa group by VirusName,SrcIP)
order by virus,virustotal desc;
指的是什么?
select '' virusname和'' srcip中的'' 符号是什么意思?
我的表结构可能写的好不是很清晰,我再写的详细些,请你再帮我看看。表结构:(表名:t_Alert)
VirusID VirusName SrcIP DstIP
-------------------------------------------------
1 worm1 1.2.3.4 5.6.7.8
2 worm1 6.7.8.9 2.1.3.2
3 backdoor .... .....
4 toy
5 hacker
6 ...
.. ...其中VirusID代表了每个Virus信息记录是没有重复值的。用sql语句统计后,要求得到
1。每个VirusName类别的Virus数量。
2。每个VirusName类别中来自不同SrcIP的Virus的数量。
3。每个VirusName类别中来自不同SrcIP的Virus的DstIP(目标IP)的个数(同一个DstIP只计数1次)。要求显示如下的结果:VirusName SrcIP VirusTotal DstIPCount
-----------------------------------------------------------------------
worm1 30(worm1总数) 5
1.2.3.4 10(1.2.3.4来的worm1的数量) 3
6.7.8.9 20(6.7.8.9来的worm1的数量) 2backdoor 132 13
2.3.4.5 15 3
4.5.6.7 25 5
....... .. .
.......因为对sql还不太熟悉,请高手详细指点。
我用的virusid是number型的,其它都是varchar2型的
时间等其他的字段就没有列出来了。我再把真实的表中得字段列出来,请大家帮我再看看。表1 t_Alert:
(说明) 病毒警告ID 病毒内容描述ID 病毒来源IP地址 病毒攻击目标IP地址
(数据类型) number型 number型 number型 number型
ulAlertID ulSignatureID ulSrcIP ulDstIP
-----------------------------------------------------------------------------------
1001 100056 1062731766 1062731787
1002 100057 1062731763 1062731768
1003 100058 ....... ........表2 t_msg:
(说明) 病毒内容描述ID 病毒内容
(数据类型) number型 text型
ulSignatureID MSG
-----------------------------------------
100056 BACKDOOR1
100057 TOY1现有的表结构如上所示,不知道写的请不清楚。
对了,请注意ulSrcIP 和ulDstIP 是数字型的,统计出来以后再转换成字符型的。ATGC(这一生受了很多委屈吃了很多苦。。),不好意思,可能是这个地方的类型不一致,请你
帮我改一下下面我用的语句:select ulSignatureID,ulSrcIP,VirusTotal,DstIPCount
from (select ulSignatureID,ulSignatureID virus,'' ulSrcIP,count(ulAlertID) VirusTotal,count(distinct ulDstIP) DstIPCount
from t_Alert
group by ulSignatureID
union all
select '' ulSignatureID,ulSignatureID virus,ulSrcIP,count(ulAlertID) VirusTotal,count(distinct ulDstIP) DstIPCount
from t_Alert
group by ulSignatureID,ulSrcIP)
order by virus,virustotal desc;
select ulSignatureID,ulSignatureID virus,to_number('') ulSrcIP,count(rowid) VirusTotal,count(distinct ulDstIP) ulDstIPCount from aa group by ulSignatureID
union all
select to_number('') ulSignatureID,ulSignatureID virus,ulSrcIP,count(rowid) VirusTotal,count(distinct ulDstIP) ulDstIPCount
from aa group by ulSignatureID,ulSrcIP)
order by virus,virustotal desc;