0

これは私が試しているクエリです。

select
    UserId,
    count(e.UserId) as 'Experiments',
    count(t.TaskId) as 'Tasks tried',
    count(case when t.TaskStatus = 'Completed' then t.TaskStatus end) as 'Tasks completed',
    sec_to_time(avg(timediff(TaskLocalUserEndDateTime,TaskLocalUserStartDateTime))) as 'Average Time'
from
    Tasks as t,
    Experiments as e
where
    t.ExperimentId = e.ExperimentId
and
    e.UserId = e.UserId
group by
    UserId;

count(e.UserId)count(t.TaskId)間違っているのと同じ結果が得られます。ただしcount()、結合なしでクエリを実行すると、正しい結果が返されます。次に例を示します。

select
    count(UserId)
from
    Experiments
where
    UserId = UserId
group by 
    UserId;
4

1 に答える 1

0

これが役立つかどうかはわかりませんが、以下のクエリを実行すると、望ましい結果が得られますか - group by: を参照してください。

select
    count(UserId), ExperimentId
from
    Experiments
where
    UserId = UserId
group by 
    ExperimentId;

クエリをチェックするだけです - Tasks テーブルと Experiments テーブルの間の結合が ExperimentId にあることに気付きました - ここで、あなたが述べたクエリでは、userId のみが使用され、目的の結果が得られます。これが役立つかどうか教えてください。

select
    UserId,
    e.Experiments, -- count(e.UserId) as 'Experiments',
    count(t.TaskId) as 'Tasks tried',
    count(case when t.TaskStatus = 'Completed' then t.TaskStatus end) as 'Tasks completed',
    sec_to_time(avg(timediff(TaskLocalUserEndDateTime,TaskLocalUserStartDateTime))) as 'Average Time'
from
    Tasks as t,
--    Experiments as e 
LEFT JOIN 
(
   select count(UserId) as 'Experiments', ExperimentId from Experiments group by ExperimentId
) as e
where
    t.ExperimentId = e.ExperimentId
and
    e.UserId = e.UserId
group by
    UserId;
于 2013-02-09T06:12:26.743 に答える