当前位置: 首页 > 面试题库 >

MySQL多级父级选择/联接问题

柯树
2023-03-14
问题内容

我有一个希望很简单的MySQL查询问题,在深夜使我难以理解。我正在尝试执行SELECT,该SELECT计算一组数据(订单)的实例数量,并通过在订单本身上方几层的父级中存在的值对这些实例进行分组。

例如:

CREATE TABLE  `so_test`.`categories` (
  `id` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1;

CREATE TABLE  `so_test`.`product_group` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `category_id` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1;

CREATE TABLE  `so_test`.`products` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `product_group_id` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1;

CREATE TABLE  `so_test`.`orders` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `product_id` int(10) unsigned NOT NULL auto_increment,
  `customer_id` int(10) unsigned NOT NULL auto_increment,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1;

我正在寻找的是以下附近的东西:

SELECT count(orders.id),categoryId来自订单,类别(1,2,3)中的WHERE
order.customer_id,GROUP BYorders.productId.productGroupId.categoryId

假设类别1的产品有17个订单,类别2的产品有2个订单,类别3的产品214个订单,我希望能得到的是:

count(orders.id), categoryId
============================
      17              1
      2               2
      214             3

如果我想按product_id分组,那很好。.但是两层向上的部分正在抛出我。

谢谢!


问题答案:

只需将它们一起加入:

select categoryid, count(orders.id)
from category c
left join product_group pg on pg.category_id = c.id
left join products on p on p.product_group_id = pg.id
left join orders o on o.product_id = p.id

对于没有订单的类别,count(orders.id)将返回0,而count(*)将返回一个或多个,这取决于产品组和产品的数量。

内部联接根本不计算没有订单的类别。



 类似资料:
  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!

  • 问题内容: 我有一个具有以下字段的MySQL表: 其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。 但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent-> children格式。我怎样才能做到这一点? 查询的结果记录应类似于: 问题答案: 您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-

  • 级联选择组件。支持嵌套(字表表示法)和扁平(父指针表示法)的树形数据结构。 Usage 全部引入 import { Cascader } from 'beeshell'; 按需引入 import { Cascader } from 'beeshell/dist/components/Cascader'; Examples Cascader 与 BottomModal 组合使用 Code 详细

  • Cascader 级联选择器 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。通过props.expandTrigger可以定义展开子级菜单的触发方式。 <div class="block"> <span class="demonstration">默认 c

  • 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。通过props.expandTrigger可以定义展开子级菜单的触发方式。 <div class="block"> <span class="demonstration">默认 click 触发子菜单</spa

  • Cascader 级联选择器 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。 基础用法 有两种触发子菜单的方式 :::demo 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器。通过expandTrigger可以定义展开子级菜单的触发方式。本例还展示了onChange事件,它的参数为 Cascader 的绑定值:一个由各级菜单的值所组成的数组。