2013-09-26 160 views
0

在dns日志表中,尝试使用此查询获取平均值。一天之内的DNS查询的数量:使用avg(count())函数

select to_char(log_time, 'DD-MM-YYYY'),log_client,avg(count(*)) as nums from msint 
where to_char(log_time, 'DD-MM-YYYY') = '25-09-2013' and log_client = '10.10.10.1'; 

,并得到一个错误"nested group function without GROUP BY" 但是当我添加group by log_client,log_time,得到另一个错误not a single-group group function

也许有人可以帮我一个解决方案。谢谢。

回答

0

请尝试下面的查询,检查结果是否是预期的。

select 
    log_time, 
    log_client, 
    avg(nums) nums 
From(
    select 
    to_char(log_time, 'DD-MM-YYYY')log_time, 
    log_client, 
    count(*) over(partition by to_char(log_time, 'DD-MM-YYYY'), log_client) as nums 
    from msint 
    where 
    to_char(log_time, 'DD-MM-YYYY') = '25-09-2013' and 
    log_client = '10.10.10.1' 
)x 
group by log_time, log_client; 
+0

谢谢。这给了一些输出,但即时通讯仍然不确定是否正确。只是测试。 – Sergey

+0

我猜想在count(*)上取平均值没有任何意义,因为分组是基于相同的列完成的,无论如何我改变了查询而没有错误。 – TechDo

0

使用group by和having子句。如果可能的话请分享你的表结构,以便查询可以对照它进行检查。

+0

这里是表的结构'CREATE TABLE MSINT ( ID NUMBER NOT NULL ,LOG_CLIENT VARCHAR2(50 BYTE) ,LOG_QUERY VARCHAR2(512 BYTE) ,LOG_TIME TIMESTAMP(6)本地时区 ,约束MSINT_PK PRIMARY KEY ( ID )' – Sergey

+0

你正在使用哪个db?你确定你的create命令已经有效吗?请提供一些数据。 –

+0

我所有的就是这个'Name Null?Type ------- ---------------------------------- -------- -------- -------------------- ID NOT NULL NUMBER LOG_CLIENT VARCHAR2(50) LOG_QUERY VARCHAR2(512) LOG_TIME TIMESTAMP(6)WITH LOCAL TIME ZONE'及其预言 – Sergey