2017-05-08 16 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 
; 

目標は、セグメントAに

答えて

1

を販売していた3社があるとして、あなたはdistinctを使用することができ、3を表示するには、「企業」を取得することです

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 
; 
異なるエントリ数を取得するには count機能で修飾子3210

+1

誰かが正確に答えることができれば、いつもとても簡単です。まことにありがとうございます! – pkg