首页 > 解决方案 > SELECT CASE 与聚合函数

问题描述

我有三张表:indi(个人)、consump(消费)和manu(制造商)

我想按年龄类别(我有实际年龄)对个人进行分组,并显示制造商消耗的总量。

所以是这样的:

Age Category | Manufacturer | Total Volume Consumed 
15 - 24      | Coca Cola    | 10ML
             | Pepsi        | 25 ML

现在按照这个示例(如何在 mysql 中按年龄段对用户数进行分组),我创建了如下年龄段:

SELECT
CASE
WHEN age >=15 AND age <=24 THEN '15-24'
WHEN age >=25 AND age <=34 THEN '25-34'
WHEN age >=35 AND age <=44 THEN '35-44'
WHEN age >=45 AND age <=54 THEN '45-54'
WHEN age >=55 AND age <=66 THEN '54-64'
WHEN age >=65 THEN '65+'
END AS ageband

链接表的键id用于indiconsump表以及code链接consumpmanu表。现在多个代码附加到一个制造商,因为制造商生产不止一种类型的饮料。

因此,该where条款将包括以下内容:

indi.id = consump.id AND consump.code = manu.code

所以我的思考过程如下(我确实意识到我需要包含case语句,但我不知道我把它放在哪里 - 作为子查询的某个地方?)

SELECT age, manufacturer, SUM(volume) as 'Total Volume Consumed'
FROM indi, consump, manu
WHERE indi.id = consump.id AND consump.code = manu.code
GROUP BY ageband

标签: mysqlcase

解决方案


只需添加案例和适当的组

    SELECT CASE 
        WHEN age >=15 AND age <=24 THEN '15-24'
        WHEN age >=25 AND age <=34 THEN '25-34'
        WHEN age >=35 AND age <=44 THEN '35-44'
        WHEN age >=45 AND age <=54 THEN '45-54'
        WHEN age >=55 AND age <=66 THEN '54-64'
        WHEN age >=65 THEN '65+'70
        END  as ageband
        , manufacturer
        , SUM(volume) as 'Total Volume Consumed'
    FROM indi
    INNER JOIN consump ON indi.id = consump.id
    INNER JOIN manu ON consump.code = manu.code
    GROUP BY ageband, manufacturer

推荐阅读