0

我有 2 张桌子:categoriesproducts.

类别有父子关系结构,数据是通过加入同一张表来获取的。

获取数据时,我必须计算:

  1. 每个类别包含多少产品stock >= 1
  2. 一个类别包含多少个子类别,其中至少包含 1 个产品stock >= 1

SELECT c. * , count( DISTINCT s.cat_id ) AS number_of_subcategories, count( DISTINCT p.id ) AS number_of_products FROM categories c
LEFT JOIN categories s 
  ON s.parent_id = c.cat_id
LEFT JOIN products p 
  ON p.cat_id = c.cat_id AND p.stock >= 1
GROUP BY c.cat_name
ORDER BY number_of_products ASC

乍一看一切顺利,但不幸的是我得到了所有子类别的总数

我是否会再错过一次加入,或者到目前为止我的问题是什么?

这是代码:SQLFiddle

4

2 回答 2

1

您可以更改查询以使用子查询来获取与此类似的子类别的数量:

SELECT c.cat_id,
  c.parent_id,
  c.cat_name,
  count(sp.cat_id)  AS number_of_subcategories,
  count(DISTINCT p.id) AS number_of_products
FROM `categories` c
LEFT JOIN
(
  select distinct s.cat_id, s.parent_id
  from categories s 
  inner join products p
    on s.cat_id = p.cat_id
  where p.stock > 1
) sp
  ON sp.parent_id = c.cat_id
LEFT JOIN products p 
  ON p.cat_id = c.cat_id 
  AND p.stock >= 1
GROUP BY c.cat_id, c.parent_id, c.cat_name;

请参阅带有演示的 SQL Fiddle

于 2013-04-04T22:11:35.440 回答
0

尝试更改ANDWHERE. 它有效吗?

弗朗西斯科

于 2013-04-04T21:49:43.397 回答