1

バンドルされた製品 (各バンドルはテーブル内の単一のアイテム) のリストを、販売された個々のコンポーネント (同じテーブル内の各単一のアイテム) の合計数に基づいてランク付けしたいと考えています。

したがって、同じテーブルに主要なアイテムとそれに関連するコンポーネントの両方を含む製品のテーブルがあります。コンポーネントをメイン アイテムまたはコンポーネントとして識別する列 (main='1' または main='0') と、コンポーネントをメイン アイテムの行 ID (master_id='xxx') に関連付ける列があります。また、販売数を追跡する列もあります (列は sold_count と呼ばれます)。

しかし、各主要品目に関連するすべてのコンポーネントの sold_count の合計数によって、主要品目の結果のクエリをソートするにはどうすればよいでしょうか?

SELECT Item_Name FROM 'products' WHERE main='1' ORDER BY _______________ ???

テーブル構造は次のとおりです。

    ID | Item_Name | Main | Master_ID | Sold_Count
    1    Kit A         1       0          0
    2    Widget A1     0       1          3
    3    Widget A2     0       1          6
    4    Kit B         1       0          0
    5    Widget B1     0       4          2
    6    Widget B2     0       4          8

したがって、関連するウィジェットの販売数に基づいて、キット A とキット B を並べ替えたいと思います。したがって、並べ替えは次のようになります。

  1. キットB
  2. キットA

キット B には 10 個のウィジェット コンポーネントが販売されていましたが、キット A には合計で 9 個しかありませんでした。

4

1 に答える 1

1

これにより、おそらく必要な結果が得られるはずです

これは、mysql 拡張機能を使用せずにグループ化し、varchar フィールドを使用してグループ化します。

 SELECT b.item_name, 
       Sum(a.sold_count) AS sales 
FROM   products AS a 
       INNER JOIN products AS b 
               ON a.master_id = b.id 
GROUP  BY b.id
ORDER  BY Sum(a.sold_count) DESC 

mysql 拡張機能を使用し、int フィールドでグループ化する場合

SqlFiddle の例http://www.sqlfiddle.com/#!2/1725c/4/0

于 2013-09-08T17:10:54.997 に答える