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 に答える