2013-02-19 6 views
1

http://sqlfiddle.com/#!2/b814c/6/0MySQL сумма времени из двух разных таблиц

select listener, SEC_TO_TIME(SUM(TIME_TO_SEC(time))) as total_time, count(listener) as total_listened from db1 where date = "2013-02-20" group by listener 

Как я могу добавить значения db2 на этот запрос?

Я пробовал вложенные запросы, но он работает слишком медленно и не показывает только слушателей db2.

Обе таблицы в разных базах данных, если они что-то меняют.

Результат должен быть похож на этот образец;

LISTENER TOTAL_TIME TOTAL_LISTENED 
listener1 00:15:39 1 
listener2 00:22:59 2 
listener3 00:13:34 1 
+1

Почему бы просто не использовать 'UNION ALL'? –

+0

Не только это, но и используйте лучший первичный ключ, например, auto incremented id. Любая причина, по которой вы отделяете дату и время? – Kermit

+0

@njk Существует, но я не поместил его в образец. Время - это продолжительность прослушанной части, а не часы. – milesh

ответ

1

Вот исходный запрос

select listener, SEC_TO_TIME(SUM(TIME_TO_SEC(time))) as total_time, 
count(listener) as total_listened from db1 where date = "2013-02-20" 
group by listener 

Попробуйте комбинируя listener и time столбцы

Затем применить операции Светлану их UNION

SET @GivenDate='2013-02-20'; 
SELECT listener,SEC_TO_TIME(SUM(TIME_TO_SEC(time))) as total_time, 
COUNT(listener) as total_listened 
FROM 
(
    SELECT listener,time FROM db1 
    where date = @GivenDate 
    UNION ALL 
    SELECT listener,time FROM db2 
    where date = @GivenDate 
) A GROUP BY listener; 
1

Вы ищете?

select listener, SEC_TO_TIME(SUM(TIME_TO_SEC(time))) as total_time, count(listener) as total_listened from 
(
    SELECT * FROM db1 
    UNION ALL 
    SELECT * FROM db2 
) A 
where date = "2013-02-20" group by listener 

SQL FIDDLE DEMO

+0

Я принял другой ответ, потому что это было раньше, но я буду использовать это. Что делает этот «А» (в обоих ответах)? – milesh

+0

@milesh Это просто псевдоним, каждый стол (подзапрос) должен иметь псевдоним. –

Смежные вопросы