2017-05-08 85 views
1

我試圖找出有多少公司在特定細分市場有銷售。我設法計算了銷售條目數量(5),但我似乎無法通過產品細分來進行彙總。請參閱此簡化:MySQL:聚合計數

http://sqlfiddle.com/#!9/685cb/1

CREATE TABLE Table1 
    (`company` text, `sales` int, `segment` text) 
; 

INSERT INTO Table1 
    (`company`, `segment`, `sales`) 
VALUES 
    ('ACME',10,100), 
    ('ACME',11,100), 
    ('HAL',10,25), 
    ('HAL',13,25), 
    ('GEN',11,50) 
; 

SELECT COUNT(company) AS companies, 
CASE 
    WHEN segment IN (10, 11, 12, 13, 14, 15, 16) 
    THEN 'Product segment A' 
    WHEN segment IN (20, 21, 22) 
    THEN 'Product segment B' 
    WHEN segment IN (30) 
    THEN 'Product segment C' 
    END AS grp, SUM(sales) AS sum_sales 
FROM Table1 
WHERE 
     (company LIKE '%ACME%' 
    OR company LIKE '%HAL%' 
    OR company LIKE '%GEN%' 
    ) 
AND 
    segment IN (10, 11, 12, 13, 14, 15 ,16, 20, 21, 22, 30) 
GROUP BY grp 
ORDER BY grp 
; 

的目標是獲得「公司」,以示3,因爲有三個公司,銷售額在A段

回答

1

您可以使用distinct修改在count功能得到不同條目數量:

SELECT COUNT(DISTINCT company) AS companies, 
-- Here -----^ 
CASE 
    WHEN segment IN (10, 11, 12, 13, 14, 15, 16) 
    THEN 'Product segment A' 
    WHEN segment IN (20, 21, 22) 
    THEN 'Product segment B' 
    WHEN segment IN (30) 
    THEN 'Product segment C' 
    END AS grp, SUM(sales) AS sum_sales 
FROM Table1 
WHERE 
     (company LIKE '%ACME%' 
    OR company LIKE '%HAL%' 
    OR company LIKE '%GEN%' 
    ) 
AND 
    segment IN (10, 11, 12, 13, 14, 15 ,16, 20, 21, 22, 30) 
GROUP BY grp 
ORDER BY grp 
; 

SQLFiddle

+1

噢,當有人能夠準確地回答它時,它總是很容易。萬分感謝! – pkg