2015-04-20 60 views
0

我有这个数据,从我目前的查询计数和分组在多列

Status Name 
1  Lester Boyer 
2  Lester Boyer 
4  Lester Boyer 
1  Lester Boyer 
2  Lester Boyer 
0  Lester Boyer 
3  Lester Boyer 
1  Lester Boyer 
1  Rosalinda Marks 
2  Rosalinda Marks 

但我想算的针对用户状态的数量,因此决赛桌看起来应该像

Status Name   Count 
0  Lester Boyer 1 
1  Lester Boyer 3 
2  Lester Boyer 2 
3  Lester Boyer 1 
4  Lester Boyer 1 
1  Rosalinda Marks 1 
2  Rosalinda Marks 1 

当前查询

SELECT allocation.status, CONCAT(profile.forename, ' ', profile.surname) AS name 
FROM allocation 
    INNER JOIN user ON allocation.user_id = user.id 
    INNER JOIN profile ON user.id = profile.user_id 
+1

做一个GROUP BY allocation.status,profile.forename,profile.surname – jarlh

+0

好没错,工程 – user1724416

+0

不,你还需要选择COUNT(*)。 – jarlh

回答

0
SELECT allocation.status, CONCAT(profile.forename, ' ', profile.surname) AS name, COUNT(allocation.status) AS Count 
FROM allocation 
    INNER JOIN user ON allocation.user_id = user.id 
    INNER JOIN profile ON user.id = profile.user_id 
GROUP BY CONCAT(profile.forename, ' ', profile.surname), 
     allocation.status 
ORDER BY name, allocation.status 
+0

不能通过保险箱进行concat/group。用户'Rose O''Donnel'将被计入'Rose''O Donnel'。 – jarlh

+0

不确定我是否得到了你,你可以在这里输入你的例子吗?:http://sqlfiddle.com/#!9/39e5d/1 –

+0

如果你在分组之前连接这个名字,那么可能会将具有例如首字母的人分组一起。相反,如果你通过姓氏进行分组,姓氏不会发生。 – jarlh

3

您的查询中似乎不需要user表。您只需版本需要group by

SELECT a.status, CONCAT(p.forename, ' ', p.surname) AS name, COUNT(*) 
FROM allocation a INNER JOIN 
    profile 
    ON p.user_id = a.user_id 
GROUP BY a.status, CONCAT(p.forename, ' ', p.surname) ;