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 であるため、以下を使用して苦情を 1 行にまとめることができますgroup_concat()

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

これは、質問にある形式とは正確には異なります。代替ソリューションを提供します。

于 2013-03-26T21:40:29.347 に答える
0

group by ではなく、Order By が必要です

select Waiter, Complaints
from Service
order by Waiter desc
于 2013-03-26T21:35:28.167 に答える
-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 に答える
-1

グループ化(編集:必要なリストを作成するため)ではなく、単にソート(ORDER BY WAITER)したいだけです。

于 2013-03-26T21:37:39.073 に答える