Mysql SQL聚合组
我觉得这是一个愚蠢的问题,但我一直无法通过搜索找到解决方案。我有一个包含销售数据的数据集,我想将一些ID组分组在一起,并显示销售总额。我不关心单个项目,我只想查看项目组及其销售总额 我现在所做的一个简化版本是:Mysql SQL聚合组,mysql,sql,grouping,Mysql,Sql,Grouping,我觉得这是一个愚蠢的问题,但我一直无法通过搜索找到解决方案。我有一个包含销售数据的数据集,我想将一些ID组分组在一起,并显示销售总额。我不关心单个项目,我只想查看项目组及其销售总额 我现在所做的一个简化版本是: SELECT year, quarter, company, segment, sum(sales) AS total_sales FROM table WHERE segment = 001 OR segment = 015 AND producer LIKE '%ACME Inc.%
SELECT year, quarter, company, segment, sum(sales) AS total_sales
FROM table
WHERE segment = 001 OR segment = 015
AND producer LIKE '%ACME Inc.%'
AND year = 2015 OR year = 2016
GROUP BY quarter, year, producer, segment
ORDER BY year, quarter, producer, segment ASC
;
我的主要问题是将段001和015放入同一个组,例如“Jelly”,以便输出显示
year|quarter|company|segment|total_sales
2015|1|ACME Inc.|Jelly|100
其中“果冻”包括001段和015段
我可以列出所有单独的项目,但不能将它们分组。我的问题是,在创建和列出细分市场的自定义组的同时,只能筛选我想要查看的公司和细分市场
谢谢你的帮助:)
编辑:这里是MCVE-
首先,我认为您需要修复
where
子句。以0
开头的数字通常是字符串。另外,您应该在中使用,并注意和
/或
逻辑:
SELECT year, quarter, company, segment, sum(sales) AS total_sales
FROM table
WHERE segment IN ('001', '015') AND
producer LIKE '%ACME Inc.%' AND
year IN (2015, 2016)
GROUP BY quarter, year, producer, segment
ORDER BY year, quarter, producer, segment ASC;
接下来,如果要组合段,请使用case
。你似乎想要:
SELECT year, quarter, company, 'Jelly' as segement,
SUM(sales) AS total_sales
FROM table
WHERE segment IN ('001', '015') AND
producer LIKE '%ACME Inc.%' AND
year IN (2015, 2016)
GROUP BY quarter, year, producer
ORDER BY year, quarter, producer ASC;
感谢您提供有关在中使用的说明。如果我将“果冻”设置为段,它将为所有段设置,但我需要能够区分多个段,不仅是果冻,还有其他段。谢谢,我在这里创建了一个MCVE::)我想要的是将两个100销售额组合到200,例如,ACME和jelly只有一行200 instad,两行各100。我明白了-MySQL只是混淆了段别名-谢谢,就是这样!有没有办法升级编辑?不过,我现在遇到了另一个问题。在我的查询中有很多数据是不需要的,但它仍然包含在其中:在第一行中,我得到了一个不需要的结果。在我看来,这很好。我的意思是-我宁愿不让第一行显示出来,因为它不是新闻节的一部分。
SELECT year, quarter, company, 'Jelly' as segement,
SUM(sales) AS total_sales
FROM table
WHERE segment IN ('001', '015') AND
producer LIKE '%ACME Inc.%' AND
year IN (2015, 2016)
GROUP BY quarter, year, producer
ORDER BY year, quarter, producer ASC;
SELECT year, quarter, company,
CASE
WHEN segment IN (001,015)
THEN 'Jelly'
WHEN segment IN (002,003)
THEN 'Bread' ELSE segment END segment,
SUM(sales) AS total_sales
FROM Table1
WHERE company LIKE '%ACME%' OR company LIKE '%HAL%'
AND year IN (2015,2016)
GROUP
BY year
, quarter
, company
, CASE WHEN segment IN (001,015) THEN 'Jelly'
WHEN segment IN (002,003) THEN 'Bread'
ELSE segment
END
ORDER
BY year, quarter, company, segment ASC
;