1

そのため、アクティビティの種類ごとに、どのユーザーが最も多くのポイントを獲得しているかを表示するクエリを作成しようとしています。以下のテーブル構造を確認できます。各アクティビティにはactivity_typeidがあり、それぞれに特定のactivity_weightがあります。

次の例では、ボブは通話で 50 ポイント、会議で 100 ポイントを獲得しています。James は通話で 100 ポイント、会議で 100 ポイントを獲得しました。

userid     activity_typeid     activity_weight
------------------------------------------------------------
123 (Bob)  8765 (calls)                50
123 (Bob)  8121 (meetings)             100
431 (James) 8765 (calls)               50
431 (James) 8121 (meetings)            100
431 (James) 8765 (calls)               50

以下を出力できるようにしたい。

  1. 通話のトップ パフォーマー = James
  2. ミーティングのトップ パフォーマー = Bob、James。

activity_typeidはランダムに入力されるため事前にわからないので、各 DISTINCT/UNIQUE activity_typeidの SUM を計算する何らかのクエリを作成できるかどうか疑問に思っていました。

よろしくお願いします。

4

5 に答える 5

0

特定のアクティビティの (単一の) トップ パフォーマーを選択するためのクエリ:

SELECT userid, activity_typeid, SUM(activity_weight)
FROM ?
WHERE activity_typeid = ?
GROUP BY userid
ORDER BY SUM(activity_weight) DESC
LIMIT 1

上位 5 人または 10 人のパフォーマーを出力するように変更LIMITし、コードでそれらを検査して、どちらを表示するかを確認できます (たとえば、2 人の人が同じスコアを持っている場合)。

于 2013-10-03T07:57:01.347 に答える
0

このGROUP BYステートメントを使用して、各ユーザーと各アクティビティ タイプ ID の合計を計算する必要があります。次のようなことを試してください:

SELECT userid, activity_typeid, SUM(activity_weight)
FROM table
GROUP BY userid, activity_typeid

次に、これをサブクエリとして使用して、各 activity_typeid のトップ パフォーマーを決定します。

于 2013-10-03T07:55:18.667 に答える
0

GROUP BY集計関数を使用する場合は、 の代わりに ,を使用する必要がありますDISTINCT。と でグループ化useridactivity_typeid、 を選択しますSUM(activity_weight)

于 2013-10-03T07:55:28.627 に答える
0

もちろん、次のように group by を使用してください:

SELECT t.userid, t.activity_typeid, sum(t.activity_weight) 
FROM YOURTABLE t
GROUP BY t.userid, t.activity_typeid
于 2013-10-03T07:55:32.400 に答える