Объединяя похожие данные в MySQL

У меня есть следующие данные:

 date     | source              | session | device
 5/1/2016 | facebook.com/social | 5       | mobile
 5/1/2016 | facebook.com/post   | 50      | desktop
 5/1/2016 | facebook.com/commun | 25      | mobile
 5/1/2016 | pintrest.com/social | 15      | mobile
 5/1/2016 | pintrest.com/commun | 25      | mobile

Мне нужны данные как:

 date     | source              | session | device
 5/1/2016 | facebook            | 30      | mobile
 5/1/2016 | facebook            | 50      | desktop
 5/1/2016 | pintrest            | 40      | mobile

Я использую базу данных MySQL

1 ответ

Решение

Предполагая, что вы можете использовать первое вхождение точки в качестве сокращенного URL-адреса ('.'), Тогда вам пригодится следующее.

select
  date
  , LEFT(source, LOCATE('.', source) - 1) as 'short_source'
  , sum(sessions) as  'sessions'
  , device
from date
group by 
  date
  , LEFT(source, LOCATE('.', source) - 1)
  , device

SQL Fiddle

Хорошо, так что если нужно, чтобы таблица содержала недопустимый URL-адрес (в этом случае URL без DOT):

select
  date
  , COALESCE(LEFT(source, LOCATE('.', source) - 1), 'invalid_url') as 'short_source'
  , sum(sessions) as  'sessions'
  , device
from date
group by 
  date
  , LEFT(source, LOCATE('.', source) - 1)
  , device
Другие вопросы по тегам