我有一個產品表和一個更新日誌表。產品表有各種類別(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