Как сгруппировать и посчитать столбец с двумя значениями одновременно? - PullRequest
2 голосов
/ 14 марта 2019

У меня есть таблица с названием кампании. Вот как это выглядит:

website event type
amazon  imp
amazon  imp
amazon  imp
amazon  click
apple   click
apple   imp
adidas  click
adidas  imp
adidas  click
adidas  imp

Я хочу сгруппировать его по различным значениям в столбце типа события, а затем посчитать различные значения в типе события. Моя таблица должна выглядеть так:

website imp click
amazon  3   1
apple   1   1
adidas  2   2

Как бы я поступил так?

РЕДАКТИРОВАТЬ 14/03/19:

Куда я так далеко добрался:

  SELECT a.[webite], case when a.[event_type] = 'imp' then 1 end as 'imp', case when a.[event_type] = 'click' then 1 end as 'click'
  FROM [campaign] as a
  INNER JOIN [campaign] as b 
  ON a.[webite] = b.[webite]

Ответы [ 3 ]

4 голосов
/ 14 марта 2019

Вы можете использовать PIVOT с COUNT

DECLARE @SampleTable TABLE (website VARCHAR(10), [event type]  VARCHAR(10))
INSERT INTO @SampleTable VALUES
('amazon' ,'imp'),
('amazon' ,'imp'),
('amazon' ,'imp'),
('amazon' ,'click'),
('apple' ,'click'),
('apple' ,'imp'),
('adidas' ,'click'),
('adidas' ,'imp'),
('adidas' ,'click'),
('adidas' ,'imp')


SELECT * FROM @SampleTable
PIVOT (COUNT([event type]) FOR [event type] IN ([imp], [click])) PVT

Результат:

website    imp         click
---------- ----------- -----------
adidas     2           2
amazon     3           1
apple      1           1
2 голосов
/ 14 марта 2019

Требуется условная агрегация:

select website,
       sum(case when event = 'imp' then 1 else 0 end) as imp,
       sum(case when event = 'click' then 1 else 0 end) as click
from campaign c
group by website;
1 голос
/ 14 марта 2019

Из другой доступной опции в ответе другого пользователя вы также можете попробовать следующий запрос:

select a.website, imp, click from(
     select website, count(eventtype) as imp
     from test a where a.eventtype = 'imp' group by website
)a 
inner join (
     select website, count(eventtype) as click
     from test b where b.eventtype = 'click' group by website  
)b on a.website = b.website

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...