MySQL:来自两个不同表的SUM数据

时间:2015-03-26 00:50:58

标签: mysql

我有一个用于跟踪点击次数的菜单的数据库。菜单包含类别和子类别,我尝试获取每个类别的点击量,但在数据库中,如果项目在一个中,则点击将注册到子类别,否则点击将计入类别中。我有一个查询可以获得所有子类别(category_type 3)的点击次数,但我需要添加来自其父类别(category_type 2)的点击次数。有一个名为CategoryHierarchy的表格将每个类别映射到它的父类别。这就是我所拥有的:

SELECT IFNULL(SUM(`MenuEntryAnalytics`.`opened`), 0) AS `clicks`,
  `Categories`.`id`, 
  `Categories`.`name`,
  `Categories`.`category_type`,
  `CategoryHierarchy`.`parent_id` AS `parent` 
FROM `MenuEntryAnalytics` 
  INNER JOIN `MenuEntries`  
      ON `MenuEntryAnalytics`.`menu_entry_id` = `MenuEntries`.`id` 
  LEFT JOIN `MenuEntryToCategory` 
      ON `MenuEntryAnalytics`.`menu_entry_id` = `MenuEntryToCategory`.`menu_entry_id` 
  RIGHT JOIN `Categories` 
      ON `MenuEntryToCategory`.`category_id` = `Categories`.`id` 
  RIGHT JOIN `CategoryHierarchy`
      ON `Categories`.`id` = `CategoryHierarchy`.`category_id` 
WHERE `Categories`.`category_type` = 3 
GROUP BY `id`;

结果:

clicks  id  name                  type parent
=============================================
2032    3   Appetizers              3   2
455     4   Salads                  3   2
680     6   Sandwiches              3   5
424     7   Burgers                 3   5
584     9   Pizza                   3   8
466     10  Kids Menu               3   8
1445    12  Soda                    3   11
1089    13  Signature Cocktails     3   11
391     14  Bottled Beer            3   11
167     15  Wine                    3   11
0       17  Events                  3   16
0       18  Sponsors                3   16
186     19  Dessert                 3   11
621     26  Restaurants             3   22
263     27  Bars                    3   22
112     28  Services                3   25
254     29  Amenities               3   25
67      30  Exclusive Benefits      3   25
190     31  Area Attractions        3   24
14      32  Entertainment           3   24
2       33  Shopping                3   24
117     34  Transportation & Tours  3   24
471     35  Mixed Drinks            3   11
541     36  Draft Beer              3   11

如果我GROUP BY parent那么我可以获得我需要的大部分内容(来自每个类别的子类别的所有点击)但是这并没有将点击次数计入类别(相反)到子类别,即category_type 2)。我试图添加该部分,我只能想到使用子查询,但我无法识别我正在查看哪个类别,因此我得到一个包含多行的子查询

PS我无权重组数据库。

1 个答案:

答案 0 :(得分:0)

由于父ID与ID位于同一名称空间,因此您可以简单地使用IFNULL来选择父项(如果存在),或者使用ID。并将其用作分组策略。

您可能还希望选择与实际列相同的数据。

GROUP BY   IFNULL(CategoryHierarchyparent_idCategoriesidCategoryHierarchyparent_id