2013-03-26 40 views
1

说我有一个表,如下所示SQL如何分组

Waiter   Complaints 
Tim    Slow 
John    Rude 
Mike    Dumb 
Tim    Asleep 
Tim    Charge too much 
Mike    Lazy 

如何创造一个服务员都通过次数最多的投诉下令表,但投诉也说明了什么?防爆下面

Waiter   Complaints 
Tim    Slow 
Tim    Asleep 
Tim    Charge too much 
Mike    Lazy 
Mike    Dumb 
John    Rude 
+0

你想创建一个表或只是查询该结果集的表吗? – 2013-03-26 21:35:09

+0

只需加入桌子本身...... – Strawberry 2013-03-26 21:35:52

回答

0

你不想要一组,你想顺序按

select Waiter, Complaints 
from Service 
order by Waiter desc 
+0

除了OP并不真正想要它由服务员订购 - 他们希望通过服务员的投诉数量。 – 2013-03-26 23:48:04

-1

这将使你的服务员,投诉,并为每个服务员每类投诉的数量:

SELECT waiter, complaints, COUNT(complaints) AS `complaint_count` 
FROM table 
GROUP BY waiter, complaints 
ORDER BY `complaint_count` DESC 

注意这不会为了服务员一起,而是顶部服务员,投诉的组合,所以你可以有这样的:

Mike Dumb 5 
Tim  Lazy 3 
Mike Rude 2 
Tim  Rude 1 

您可以通过服务员第一顺序以及由最后一行改为:

ORDER BY waiter ASC, `complaint_count` DESC 

这可能会看到这样的信息:

Mike Dumb 5 
Mike Rude 2 
Tim  Lazy 3 
Tim  Rude 1 
3

只是计算每个服务员的投诉数量和加入该到你的餐桌:

select t1.waiter,t1.complaints 
from table t1 
inner join(
    select waiter,count(1) as num_complaints 
    from table 
    group by waiter 
)t2 
on(t1.waiter = t2.waiter) 
order by t2.num_complaints desc,t1.waiter,t1.complaints; 
+0

Downvoter:谨慎解释? – 2013-03-26 21:40:38

+1

这是一个演示小提琴 - http://sqlfiddle.com/#!2/49240/1 – Taryn 2013-03-26 21:42:25

-1

你只是想排序(ORDER BY WAI TER)不是群组(编辑:制作你想说的名单)。

1

这之中MySQL,你可以把投诉在同一行上,使用group_concat()

select waiter, group_concat(complaints) 
from t 
group by waiter 
order by count(*) desc 

这不正是你的问题的格式。它提供了另一种解决方案。