sql cte不重复计数

问题描述

我想将品牌产品的总数添加到总数栏中。

http://sqlfiddle.com/#!18/2d00a/1

这是我的查询

WITH cte AS
(
    SELECT id 
    FROM category 
    WHERE id = 1 

    UNION ALL 

    SELECT c.id 
    FROM category c,cte 
    WHERE c.parentid = cte.id
),cte2 AS 
(
    SELECT brandid,d.catid 
    FROM products d,cte 
    WHERE d.catid = cte.id

    UNION ALL

    SELECT u.brandid,COUNT(disTINCT u.id) 
    FROM products u,cte 
    WHERE catid = cte.id
    GROUP BY brandid
)
SELECT disTINCT 
    brandid,logo,brand,id,id as total 
FROM
    brand,cte2 
WHERE 
    id = cte2.brandid 
ORDER BY 
    brand ASC

解决方法

这里是根据我的理解所得到的查询,以获取每个品牌的总产品数。 DBFIDDLE工作代码

header('HTTP/1.0 301');

结果:

enter image description here

,
166.66666666666666

假设您要根据类别1(也包括子类别)过滤产品

SELECT b.id,b.logo,b.brand,count(p.id) total
FROM brand b
LEFT JOIN products p ON p.brandid = b.id
GROUP BY b.id,b.brand