0

这是我的问题:

我有一张这样的桌子:

 Table Log
 int id;
 int time;
 timestamp DATE;
 int sid (FK to table Site);

和一个表站点:

 Table Site;
 int id;
 varchar title;

在我的日志表中,一个站点可以出现 0 次或 N 次,我需要获取每个站点的时间总和。

此请求已完成并且似乎有效,现在我需要在我的日志中获取站点标题和特定时期的总时间的平均值。

这是我的查询:

SELECT site, AVG(sumtime)
FROM (
    SELECT Site.TITLE as site, SUM(time) as sumtime FROM Log
    INNER JOIN sites ON Site.ID = Log.sid
    WHERE Log.DATE between '2012-11-13' AND '2012-11-15'
    GROUP BY Site.TITLE
) AS t1
GROUP BY t1.site;

但是在这种情况下,平均值似乎不起作用,我得到的值是我在子查询中计算的总和,有什么帮助吗?

编辑:

这是一个数据样本:

Site
1 SiteA
2 SiteB

Log
1 2500 "2012-11-14 07:00:01" 1
2 3500 "2012-11-14 07:10:01" 1
3 4500 "2012-11-14 07:12:01" 1
4 6500 "2012-11-13 10:10:01" 1
5 2500 "2012-11-14 08:00:01" 2
6 3500 "2012-11-14 10:10:01" 2
7 5500 "2012-11-13 12:10:01" 2

我现在需要的是,一个时期的时间总和的平均值(假设这个例子是 2012-11-13 到 2012-11-14),因此对于预期数据:

Site, avg time sum
Site A, 8500
Site B, 5750
4

2 回答 2

6

我解决了我的问题,找到了编写查询的好方法(感谢@tombom):

SELECT t1.site, AVG(sumtime)
FROM (
    SELECT Site.TITLE as site, SUM(time) as sumtime FROM Log
    INNER JOIN Site ON Site.ID = Log.sid
    AND Log.DATE between '2012-11-14' AND '2012-11-15'
    GROUP BY site, DATE(Log.DATE)
) AS t1
group by t1.site
于 2012-11-15T11:43:11.567 回答
-1

试试这个

SELECT t1.site, AVG(t1.sumtime)
FROM (
SELECT Site.TITLE as site, SUM(time) as sumtime FROM Log
INNER JOIN sites ON Site.ID = Log.sid
WHERE Log.DATE between '2012-11-13' AND '2012-11-15'
GROUP BY time
) AS t1
GROUP BY t1.site;
于 2012-11-15T11:00:29.473 回答