0

私は3つのテーブルユーザー、製品、販売を持っています

user
UID | NAME
 1  | agent1
 2  | agent2
 3  | agent3
 4  | agent4
 5  | agent5

products
PID | PNAME
 1  |   P1
 2  |   P2
 3  |   P3

sales
SID | UID | PID | SALES_CREATED
 1  |  3  |  1  | 2013-07-13 01:15:04
 2  |  1  |  1  | 2013-07-13 01:25:34
 3  |  3  |  1  | 2013-07-13 02:01:34
 4  |  3  |  1  | 2013-07-13 02:45:34
 5  |  5  |  1  | 2013-07-13 02:56:34
 6  |  5  |  1  | 2013-07-13 03:21:34
 7  |  2  |  3  | 2013-07-13 03:38:34
 8  |  3  |  2  | 2013-07-13 03:51:34
 9  |  4  |  2  | 2013-07-13 04:25:34
 10 |  3  |  1  | 2013-07-13 04:45:04
 11 |  1  |  3  | 2013-07-13 04:55:34
 12 |  2  |  2  | 2013-07-13 05:01:34
 13 |  1  |  3  | 2013-07-13 05:15:34
 14 |  5  |  3  | 2013-07-13 05:36:34
 15 |  5  |  3  | 2013-07-13 06:21:34

ここで、エージェントごとの販売結果は次のとおりです: (ユーザー UID でソート)

  user   | P1 | P2 | P3 |
 agent1  | 1  | 0  | 2  |
 agent2  | 0  | 1  | 1  |
 agent3  | 4  | 1  | 0  |
 agent4  | 0  | 1  | 0  |
 agent5  | 2  | 0  | 2  |

ここで、P1 で最大の売上を上げ、最低でも 3 件の結果のみを持つユーザーを並べ替える結果が必要です。結果は次のようになります。

  user   | P1 | P2 | P3 |
 agent3  | 4  | 1  | 0  |
 agent5  | 2  | 0  | 2  |
 agent1  | 1  | 0  | 2  |

その結果を表示するための最高の mysql_query を教えてください。

4

2 に答える 2

1

私が答えているのは、(1) 退屈で、(2) 頭の体操がしたかったからです。私は通常、人々が投稿して実行したときに答えたり (誰のコメント/投稿にも応答しないでください)、彼らが試したことを提供したり (クエリなし) したりしたくありません。
将来的に SO に関するより良い/より多くのヘルプが必要な場合は、試したクエリを投稿し、このような複雑で多様なデータを使用して sqlfiddle を作成することをお勧めします - http://sqlfiddle.com/

そのため、その注意点を踏まえて、目的の結果を得る方法を次に示します

SELECT 
   user.NAME as user, 
   SUM(PID=1) as P1,
   SUM(PID=2) P2,
   SUM(PID=3) P3 
FROM
   sales
LEFT JOIN 
   user
ON 
   user.UID = sales.UID
GROUP BY 
   sales.UID
HAVING 
   P1+P2+P3 >= 3
ORDER BY 
   P1 DESC, P2 DESC, P3 DESC;

これが実際の動作を示すsqlfiddleの例です - http://sqlfiddle.com/#!2/d3405/8

于 2013-07-13T02:41:03.820 に答える