我有一个产品表和一个更新日志表。产品表有各种类别(Cat 1,Cat 2,Cat3)和价格水平(Level1,Level2,Level3),我想对这些类别进行计数和分组。所以,我有两个表中的Mysql内部连接计数
SELECT products.category,
COUNT(CASE WHEN products.price_level='1' THEN products.category END) as 'Level1',
COUNT(CASE WHEN products.price_level='2' THEN products.category END) as 'Level2',
COUNT(CASE WHEN products.price_level='3' THEN products.category END) as 'Level3'
FROM products
GROUP BY products.category
ORDER BY COUNT(products.category) DESC
结果是:
Category Level1 Level2 Level3
Cat1 33 14 6
Cat2 19 29 10
Cat3 5 17 15
到目前为止,good..this工作正常。
现在我想在带有productId字段的(changelog)中引入另一个表,该字段链接到products.id字段。它也有一个字段“状态”,值为Active,Inactive)。所以我想状态字段添加到表中显示有效的产品,如:
Category Level1 Level2 Level3 Active
Cat1 33 14 6
Cat2 19 29 10
Cat3 5 17 15
所以我这样做不工作:
SELECT products.category,
COUNT(CASE WHEN products.price_level='1' THEN products.category END) as 'Level1',
COUNT(CASE WHEN products.price_level='2' THEN products.category END) as 'Level2',
COUNT(CASE WHEN products.price_level='3' THEN products.category END) as 'Level3',
COUNT(CASE WHEN changelog.status='Active' THEN changelog.status END) as 'Active'
FROM products
LEFT JOIN changelog on products.id=changelog.productId
GROUP BY products.category
ORDER BY COUNT(products.category) DESC
计数就会失控,因为它看来,类别计数可能会累积到更改日志表中的每个条目。这个查询有什么问题?
产品涉及许多更新日志,反之亦然,所以表之间的cartesean人为地增加了计数。您需要获取加入之前生成的计数。 – xQbert