正确的ORDER BY基于同一表中的关联项查询项目

时间:2013-09-08 16:34:48

标签: php mysql sql

我想对捆绑产品列表进行排名(每个捆绑包是表中的单个项目),该列表基于其各个组件的总数(在同一个表中是每个单独的项目)。

所以我有一个产品表,其中包含同一个表中的主要项目及其相关组件。有一列将其标识为主项目或组件(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

所以我希望根据销售的相关小部件的数量对Kit A和Kit B进行排序。所以排序应该是:

  1. Kit B
  2. Kit A
  3. 因为套件B销售了10个小部件组件,而套件A仅有9个小部件。

1 个答案:

答案 0 :(得分: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