0

假设我有一张如下表

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
4

5 回答 5

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;
于 2013-03-26T21:37:30.463 回答
1

这是 MySQL,您可以将投诉放在一行上,使用group_concat()

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

这不完全是您在问题中的格式。它提供了另一种解决方案。

于 2013-03-26T21:40:29.347 回答
0

您不想要分组依据,您想要订购依据

select Waiter, Complaints
from Service
order by Waiter desc
于 2013-03-26T21:35:28.167 回答
-1

你只是想排序(ORDER BY WAITER)而不是分组(编辑:产生你说你想要的列表)。

于 2013-03-26T21:37:39.073 回答
-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
于 2013-03-26T21:36:59.723 回答