2016-05-10 3 views
2

У меня есть таблица t1:граф разные строки из одной таблицы

id|id_title|action 

Данные в таблице:

1|1|like 
2|1|like 
3|1|unlike 
4|2|share 
5|2|share 

Так что я хочу, чтобы получить следующий результат из запроса:

id|count like|count unlike|count share 

1|2|1|0 
2|0|0|2 

Я пытаюсь использовать следующий запрос:

SELECT id_title, (Select Count(id) From T1 WHERE action='like') As CountOfItems FROM T1 GROUP BY id_title 

Но он всегда возвращает количество первой строки. Что я должен делать? Или, может быть, я должен изменить структуру таблицы?

+0

Я не понял, какой запрос вы хотите применить к таблице, можете ли вы подробнее рассказать об этом? – Webeng

+0

Я отредактировал свой ответ, теперь он должен работать – Webeng

ответ

2
SELECT id_title AS id, SUM(action='like') AS 'count like', 
SUM(action='unlike') AS 'count unlike', SUM(action='share') 
AS 'count share' FROM t1 GROUP BY id_title 

Позвольте мне знать, если это работает для вас.

+0

missing FROM article – Thamilan

+0

@Thamizhan thanks :) – Webeng

6

Просто используйте условную агрегацию.

select 
id_title 
,sum(case when action='like' then 1 else 0 end) As Count_Like 
,sum(case when action='unlike' then 1 else 0 end) As Count_Unlike 
,sum(case when action='share' then 1 else 0 end) As Count_Share 
FROM T1 
GROUP BY id_title 
+0

или, так как это MySQL, просто 'SUM (action = 'like')' – Strawberry

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