【问题标题】:MySQL: Aggregating countsMySQL:聚合计数
【发布时间】:2017-05-08 08:03:14
【问题描述】:

我试图找出有多少公司在特定细分市场有销售。我设法统计了销售条目 (5),但我似乎也无法按产品细分进行汇总。请看这个简化:

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,因为有 3 家公司在细分 A 中有销售。

【问题讨论】:

    标签: mysql sql select count aggregate


    【解决方案1】:

    您可以在count 函数中使用distinct 修饰符来获取不同条目的数量:

    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

    【讨论】:

    • D'oh,当有人能够准确回答时,这似乎总是那么容易。太好了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2018-01-12
    • 1970-01-01
    • 2014-07-01
    • 2012-06-12
    • 2021-12-13
    相关资源
    最近更新 更多