【发布时间】:2016-03-07 20:43:02
【问题描述】:
我有一个产品表和一个变更日志表。产品表有各种类别(Cat 1、Cat 2、Cat3)和价格水平(Level1、Level2、Level3),我想对它们进行计数、分组和排序。所以我有
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
到目前为止,一切都很好..这很好。
现在我想在(更改日志)中引入另一个表,该表具有链接到 products.id 字段的 productId 字段。它还有一个字段“状态”,其值为 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
计数变得混乱,因为看起来更改日志表中每个条目的类别计数可能正在累积。这个查询有什么问题?
【问题讨论】:
-
产品与许多变更日志相关,反之亦然,因此表之间的笛卡尔人为地增加了计数。您需要获取加入前生成的计数。
标签: mysql