2016-05-10 13 views
2

Ich habe Tabelle t1:Count verschiedene Zeilen aus einer Tabelle

id|id_title|action 

Die Daten in der Tabelle:

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

Deshalb möchte ich als nächstes Ergebnis von Abfrage erhalten:

id|count like|count unlike|count share 

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

Ich versuche, nächste Abfrage zu verwenden:

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

Aber es gibt die Anzahl der ersten Zeile immer zurück. Was ich tun muss? Oder vielleicht muss ich die Tischstruktur ändern?

+0

Ich habe nicht verstanden, welche Abfrage Sie auf die Tabelle anwenden möchten, können Sie ein bisschen mehr erarbeiten? – Webeng

+0

Ich bearbeitete meine Antwort, es sollte jetzt – Webeng

Antwort

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 

Lassen Sie mich wissen, ob das für Sie gearbeitet.

+0

fehlende FROM-Klausel – Thamilan

+0

@ Thamizhan danke :) – Webeng

6

Verwenden Sie einfach bedingte Aggregation.

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

arbeiten oder, wie es MySQL ist, nur 'SUM (action = 'like')' – Strawberry

Verwandte Themen