2012-09-08 60 views
3

我有一个表personidmsg列。获取不同的记录与计数

personid, msg 
-------------- 
1,  'msg1' 
2,  'msg2' 
2,  'msg3' 
3,  'msg4' 
1,  'msg2' 

我想获得总msg每个personid。 我想这个查询:

select distinct personid, count(*) 
FROM mytable; 

我也试过这个查询

select distinct personid, count(msg) 
FROM mytable; 

,但没有得到实际的结果。 我想这个结果对于上面的数据:

id, count 
-------- 
1, 2 
2, 2 
3, 1 

回答

5

你只需要使用GROUP BY,而不是DISTINCT。因此,尝试此查询:

SELECT personid, COUNT(msg) 
FROM mytable 
GROUP BY personid 
ORDER BY personid; 

See this SQLFiddle

GROUP BY让您使用聚合函数,如AVG()MAX()MIN()SUM()COUNT()等而DISTINCT只是删除重复。

+0

非常感谢hims056 – Pankaj

+1

@Downvoter,小心点评? – hims056