2013-03-26 39 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 

這不正是你的問題的格式。它提供了另一種解決方案。