我有以下db表,我希望能夠計算每個銷售人員某些產品的銷售情況。MySQL對特定值的列數進行計算
|------------|------------|------------|
|id |user_id |product_id |
|------------|------------|------------|
|1 |1 |2 |
|2 |1 |4 |
|3 |1 |2 |
|4 |2 |1 |
|------------|------------|------------|
我希望能夠創建如下的結果集;
|------------|-------------|------------|------------|------------|
|user_id |prod_1_count |prod_2_count|prod_3_count|prod_4_count|
|------------|-------------|------------|------------|------------|
|1 |0 |2 |0 |1 |
|2 |1 |0 |0 |0 |
|------------|-------------|------------|------------|------------|
我正在使用此數據創建圖表,並且再次(如今天早些時候)我無法計算列總數。我努力了;
SELECT user_id,
(SELECT count(product_id) FROM sales WHERE product_id = 1) AS prod_1_count,
(SELECT count(product_id) FROM sales WHERE product_id = 2) AS prod_2_count,
(SELECT count(product_id) FROM sales WHERE product_id = 3) AS prod_3_count,
(SELECT count(product_id) FROM sales WHERE product_id = 4) AS prod_4_count
FROM sales GROUP BY user_id;
我明白爲什麼這是行不通的,因爲每一個括號中選擇user_ID的不匹配,在主SELECT語句中的外部USER_ID。
任何人都可以幫助我嗎?
感謝您
謝謝艾克,這是所有解決方案中最快的解決方案。謝謝:) – 2013-04-04 18:26:47
你不能只是'sum(product_id = 1)'? 'product_id = 1'是一個布爾表達式;它自然會在沒有開關的情況下返回1或0。 – mpen 2015-01-06 19:07:27
@Mark是的,它可以工作得很好,名義上可以更快,但是我發現解決方案寫得更具可讀性。 – 2015-01-06 22:41:35