2014-12-14 1 views
0

Это моя структура таблицы. иногда Table1 данные мой повтор (Ex: На самом деле Id 1 должен иметь только 4 строки, но иногда это 8 из-за дублирования), поэтому во избежание дублирования я использую GROUP BY команды в запросе на выборкуКак считать и получить результат двух строк в Mysql Select Query?

Таблица 1

|id| website|time| 
----------------- 
|01|facebook|20.0| 
|01|google |40.0| 
|01|youtube |10.0| 
|01|ebay |30.0| 
|02|facebook|50.0| 
|02|ebay |50.0| 

Таблица 2

|id|marks| 
    ----------- 
    |01| 80| 
    |02| 90| 
    |03| 70| 
    |04| 100| 

Я хочу, чтобы выбрать (знаки), (время на Facebook) и (кол-во времени на Google & YouTube) от конкретного пользователя

После выбора запроса дает (знаки), (время на Facebook) из user id '01'

Как получить подсчет времени как google, так и youtube id'1 'в том же запросе?

SELECT table2.id,table2.marks, table1.time 
FROM table1 
RIGHT JOIN table2 ON table1.id= table2.id 
WHERE table1.website LIKE ('%facebook%') 
AND table1.id= '01' 
GROUP BY table1.id, table1.website 
+0

Для чего нужен ваш результат? Покажи это. –

ответ

1

Вы хотите, чтобы найти время на facebook, а затем сумма youtube и google для конкретного пользователя, вы можете использовать MySQL conditional sum для достижения

select 
sum(case when t1.website = 'facebook' then t1.time else 0 end) as `fb_time`, 
(
    sum(case when t1.website='google' then t1.time else 0 end)+ 
    sum(case when t1.website='youtube' then t1.time else 0 end) 
) 
as `google_youtube`, 
t2.marks 
from table1 t1 
join table2 t2 on t1.id = t2.id 
where t1.id = '01' 

Если вам нужно вычислить то же самое для всех пользователей тогда вы можете сделать это как

select 
t1.id, 
sum(case when t1.website = 'facebook' then t1.time else 0 end) as `fb_time`, 
(
    sum(case when t1.website='google' then t1.time else 0 end)+ 
    sum(case when t1.website='youtube' then t1.time else 0 end) 
) 
as `google_youtube`, 
t2.marks 
from table1 t1 
join table2 t2 on t1.id = t2.id 
group by t1.id 
+0

это правильно, но это дает две строки. как я могу получить результат в одной строке. См. Эту ссылку http://s14.postimg.org/5x5evogr5/Capture.jpg – Codesl

+0

У вас есть несколько строк для одного и того же пользователя в таблице меток? –

+0

Вот скрипка с образцами данных, которые вы предоставили http://www.sqlfiddle.com/#!2/d5d1b/7 –

0

Если я правильно понял ваш вопрос правильно, я думаю, вам нужно будет использовать подзапрос. Следующий подзапрос возвращает два счета; time_on_facebook & time_on_google_and_youtube для всех пользователей

SELECT t1.id, t2.marks, 
COUNT(t1.time) as time_on_facebook, 
(SELECT COUNT(t1_sq.time) 
FROM `table1` as t1_sq 
WHERE (t1_sq.website = "youtube" OR t1_sq.website = "google") 
AND t1_sq.id = t1.id 
GROUP BY t1.id) as time_on_google_and_youtube 
FROM `table1` as t1 
LEFT JOIN table2 t2 ON t2.id = t1.id 
WHERE t1.website = "facebook" 
GROUP BY t1.id 

Чтобы ограничить его идентификатор пользователя = 01, добавьте в ИНЕКЕ

SELECT t1.id, t2.marks, 
COUNT(t1.time) as time_on_facebook, 
(SELECT COUNT(t1_sq.time) 
FROM `table1` as t1_sq 
WHERE (t1_sq.website = "youtube" OR t1_sq.website = "google") 
AND t1_sq.id = t1.id 
GROUP BY t1.id) as time_on_google_and_youtube 
FROM `table1` as t1 
LEFT JOIN table2 t2 ON t2.id = t1.id 
WHERE t1.website = "facebook" AND t1.id = 1 
GROUP BY t1.id 

Вы уверены, что хотите COUNT (время) или вы хотите SUM (время)? Наконец, рассмотрите возможность добавления первичного ключа в обе таблицы и, возможно, для ясности переименуйте столбец «id» в «user_id».

0

Непонятно, на что вы хотите, чтобы результат выглядел. Я сделал запрос, , но не пробовал. Попробуйте и дайте мне знать, если это сработает.

select t1.id, t1.website, sum(t1.time) as total_time, max(t2.marks) as marks 
from table1 as t1 
left join table2 as t2 
on t1.id = t2.id 
where t1.website = 'facebook' 
and t1.id = '01' 
group by t1.id, t1.website 

UNION 

select t1.id, t1.website, sum(t1.time) as total_time, max(t2.marks) as marks 
from table1 as t1 
left join table2 as t2 
on t1.id = t2.id 
where t1.website IN ('youtube', 'google') 
and t1.id= '01' 
group by t1.id, t1.website 
Смежные вопросы