我有三张桌子:
有四种类型的内容类,Content_Class与内容行有很多:1关系,用于将每个内容与一个或多个类链接。
同样的规则适用于类别,它与内容行也有很多:1。
我的目标是,给定一组内容行可能在类别上过滤,每个类的Content_Class行的聚合计数是多少?
我当前的查询:
SELECT cc.class_Id, COUNT(*) AS `records`
FROM Content_Class cc
LEFT JOIN Content c ON c.id = cc.content_id
LEFT JOIN Content_Category ccat ON c.id = ccat.content_id
WHERE cc.class_id IS NOT NULL
GROUP BY cc.class_id';
这不提供准确的计数,因为对于包含多个类别关系的内容,内容行在查询响应中每个类别链接显示一次,从而夸大了类出现次数。
例如,如果内容行映射到两个类别和两个类,它将显示四次,将结果中唯一内容与类关系的实际计数加倍...
获得UNIQUE内容行所有内容类出现次数的最佳查询的最佳查询是什么?
答案 0 :(得分:1)
你应该试试这个:
SELECT count(cc.class_id) FROM (SELECT distinct cc.class_Id, COUNT(*) AS `records`
FROM Content_Class cc
LEFT JOIN Content c ON c.id = cc.content_id
LEFT JOIN Content_Category ccat ON c.id = ccat.content_id
WHERE cc.class_id IS NOT NULL
GROUP BY cc.class_id');