私は、各会社と各場所のトップアイテムを返すSQLクエリを作成しようとしています。MySQL複数のグループ内のカウントに基づく上位項目
Date | Company | Location | Item | Price | Quantity | Total_Amount
----------|---------|----------|--------------|-------|----------|-------------
1/10/2000 | ABC | 1 | Food | 2 | 6 | 12
1/11/2000 | ABC | 1 | Food | 1 | 2 | 2
1/12/2000 | ABC | 2 | Food | 10 | 5 | 50
1/13/2000 | ABC | 2 | Electronics | 100 | 2 | 200
1/10/2000 | ABC | 1 | Consumables | 10 | 5 | 50
1/15/2000 | ABC | 2 | Electronics | 100 | 3 | 300
1/10/2000 | DEF | 1 | Electronics | 50 | 5 | 250
1/16/2000 | DEF | 1 | Electronics | 50 | 4 | 200
1/19/2000 | DEF | 2 | Food | 10 | 5 | 50
1/14/2000 | DEF | 2 | Food | 2 | 10 | 20
1/11/2000 | DEF | 2 | Food | 5 | 8 | 40
1/11/2000 | DEF | 2 | Electronics | 500 | 2 | 1000
例えば、私がしたいことは返すことです場所ごと社あたりのカウントで最上位の項目である:私はこのようになります例MySQLのテーブル(table_x)を持っています。このように、一番上のアイテム数は企業ごと、場所ごとに異なります。
Company | Location | Item | AVG(Price) | SUM(Total_Amount) | COUNT(*)
--------|----------|-------------|------------|-------------------|---------
ABC | 1 | Food | 4 | 14 | 2
ABC | 2 | Electronics | 100 | 500 | 2
DEF | 1 | Electronics | 50 | 450 | 2
DEF | 2 | Food | 5.67 | 110 | 3
私はすべての会社およびロケーションにわたってこれを行う方法を知っているが、トラブル各特定のグループ内にあると、カウントすることにより、トップのアイテムを取得しています。理想的には、できるだけ多くのアイテムタイプがあれば、これを上位N個のアイテムに拡張できるようにしたいと考えています。
これは、出現に基づいてトップアイテムを生成するために実行したSQLクエリです。
SELECT Company, Location, Item, AVG(Price), SUM(Total_Amount), COUNT(*) FROM table_x
GROUP BY Company, Location, Item
ORDER BY Company, Location, COUNT(*) desc
何かトップ商品はいつですか?また、あなたが試したものを追加してください。 – Jeffrey
こんにちはJeffrey、トップアイテムは、価格、数量または合計にかかわらず最も頻繁に発生したアイテムです。したがって、私が探している結果の上の例では、会社ABCとロケーション1のトップアイテムは、そのグループ内で2回発生したのに対し、エレクトロニクスと消耗品は1回だけだったので、食べ物でした。私は実行したクエリを追加するように編集しましたが、これはデータセット全体のカウントに基づいて上位のアイテムのみを表示します。それが合理的であれば、グループ内でこれを行うために文を洗練する場所を忘れてしまいます。 – Quest