2013-02-09 6 views
0

Это запрос, который я пытаюсь.MySQL count() не возвращает правильный номер

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; 
+0

Остальная часть запроса работает и создает желаемый набор результатов? – kabuto178

+0

Да, остальные столбцы содержат допустимые значения. Только столбец 'count (e.UserId)' имеет неправильные значения. –

+0

пожалуйста, отправьте образец данных. –

ответ

0

Не уверен, что это поможет, но вы получите желаемый результат, если вы бежите ниже запроса - см группы по:

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

Просто проверка запроса - замеченное соединение между таблицами задач и экспериментов находится на 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; 
Смежные вопросы