ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql 按照【品牌+品类】分组,销售额求和,生成数据A,再按品类分组

2024-01-03 20:13:09  阅读:73  来源: 互联网

标签:


若你想按【品牌+品类】进行分组,并对销售额求和生成数据A,然后再按品类进行分组,你可以使用以下SQL查询语句:

SELECT CONCAT(brand, '-', category) AS brand_category, 'A' AS data, SUM(sales) AS total_sales
FROM table_name
GROUP BY brand, category WITH ROLLUP
HAVING brand IS NOT NULL;

SQL

在上述查询中,我们首先使用CONCAT函数将品牌和品类连接起来,并将其命名为brand_category。然后,我们将数据A直接命名为data,同时使用SUM函数对销售额进行求和,并将其命名为total_sales。

接着,我们使用GROUP BY对品牌和品类进行分组。加上WITH ROLLUP关键字可以生成分组小计和总计的结果。

最后,我们使用HAVING子句来排除掉总计行,只选择品牌和品类不为空的行。

你需要将"table_name"替换为你实际的表名,并根据实际的列名进行相应的更改。

这样,查询结果将会按照【品牌+品类】进行分组,对销售额求和并生成数据A,然后再按品类进行分组。同时,结果中会包含分组小计和总计的行,但排除了总计行。

 

可以使用以下SQL查询语句:

SELECT brand_category, 'A' AS data, SUM(sales) AS total_sales
FROM (
  SELECT CONCAT(brand, '-', category) AS brand_category, sales
  FROM table_name
) AS subquery
GROUP BY brand_category, category;

SQL

在上述查询中,我们首先使用内部子查询来将品牌和品类字段连接成一个新的字段brand_category。

然后,在外部查询中,我们选择品牌和品类字段以及销售额,对销售额进行求和,同时将数据A命名为data。

最后,我们使用GROUP BY对brand_category和category进行分组。

 

若你想将数据A按【品类】进行分组,生成数据B,并在数据B中显示销售额排名前5的具体品牌名称,并将其他品牌名称显示为"Other",你可以使用以下SQL查询语句:

SELECT category, 
       CASE WHEN ROW_NUMBER() OVER (PARTITION BY category ORDER BY total_sales DESC) <= 5 
            THEN brand 
            ELSE 'Other' 
       END AS brand_name,
       SUM(total_sales) AS sales_total
FROM (
  SELECT brand, category, SUM(sales) AS total_sales
  FROM table_name
  GROUP BY brand, category
) AS subquery
GROUP BY category, brand_name;

SQL

在上述查询中,我们首先使用内部子查询计算每个品牌和品类的销售额总和。

然后,在外部查询中,我们按照品类进行分组,并使用ROW_NUMBER()函数对每个品类的销售额进行排名。

使用CASE语句判断排名是否在前5名内,如果是,则显示具体的品牌名称;如果不是,则显示为"Other"。

最后,我们再次使用GROUP BY对品类和品牌名称进行分组,同时对销售额求和。

你需要将"table_name"替换为你实际的表名,并根据实际的列名进行相应的更改。

这样,查询结果将按品类分组,显示销售额排名前5的具体品牌名称,其他品牌名称将显示为"Other"。同时,结果中还包含每个品类的销售额总和。

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有