1

時間をテストしているクエリが1つあります。

私は2つの異なる時間を取得し、これは私のデータの正確さを疑わせています。

次に2つの例を示します。

SELECT 
    users.fname as counselor,
    count(session.anum) as students,
    SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(starttime, signintime)))) AS 'AVG Wait Time',
    SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(finishtime, starttime)))) AS 'AVG Session Length'
FROM session
    LEFT JOIN support 
        ON support.session_id = session.session_id
    LEFT JOIN users 
        ON users.username = support.counselor
WHERE session.status = 3 
GROUP BY fname;

これは次を返します:

00:01:17 and 00:00:05

次のクエリは:

SELECT 
    users.fname as counselor,
    count(session.anum) as students,
    SEC_TO_TIME(AVG(TIMEDIFF(starttime, signintime))) AS 'AVG Wait Time',
    SEC_TO_TIME(AVG(TIMEDIFF(finishtime, starttime))) AS 'AVG Session Length'
FROM session
    LEFT JOIN support 
        ON support.session_id = session.session_id
    LEFT JOIN users 
        ON users.username = support.counselor
WHERE session.status = 3 
GROUP BY fname;

00:01:37 and 00:00:05

なぜこれが発生し、どの結果セットを信頼する必要がありますか?誰かが私の混乱を解消することができれば大好きです。

4

1 に答える 1

3

TIMEDIFF() は文字列を返します。

TIMEDIFF('13:07:33', '9:5:37') -> 04:01:56

それを直接平均すると、mysql は04:01:56intにキャストしようとし、avg(04)代わりに終了します。

time_to_secこれが、その時間値を単純な int: 14516 として返す必要がある理由です。これは直接平均化できます。

于 2013-03-11T17:55:39.073 に答える