【原创】利用MySQL 的GROUP_CONCAT函数实现聚合乘法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

MySQL 聚合函数里面提供了加,平均数,最小,最大等,但是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法。

先创建一张示例表:

1
2
3
4
CREATE  TABLE  `tb_seq` (
   `num`  int (10)  NOT  NULL ,
   `seq_type` enum( 'yellow' , 'green' , 'red' NOT  NULL
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8;

插入示例数据:

1
2
3
4
5
6
7
insert   into  `tb_seq`(`num`,`seq_type`) 
values  (4, 'green' ),(1, 'red' ),(3, 'green' ),
     (1, 'red' ),(8, 'red' ),(4, 'yellow' ),
     (8, 'red' ),(7, 'yellow' ),(10, 'red' ),
     (1, 'red' ),(1, 'red' ),(1, 'yellow' ),
     (5, 'green' ),(9, 'red' ),(1, 'yellow' ),
     (6, 'yellow' );


创建基于逗号分隔符的字符串乘法,前提是字符串逗号分隔的都是数字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DELIMITER $$
USE `t_girl`$$
DROP  FUNCTION  IF EXISTS `func_multiple`$$
CREATE  DEFINER=`root`@`localhost`  FUNCTION  `func_multiple`(
     f_nums  VARCHAR (1000)
     RETURNS  DOUBLE (10,2)
BEGIN
       -- Created by ytt 2014/10/21.
       DECLARE  result  DOUBLE (10,2)  DEFAULT  1;
       DECLARE  cnt,i  INT  DEFAULT  0;
       
       SET  cnt = CHAR_LENGTH(f_nums) - CHAR_LENGTH( REPLACE (f_nums, ',' , '' )) + 1;
       
       WHILE i < cnt
       DO
         -- get multiple result.
         SET  result = result * REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(f_nums, ',' ,i+1)), ',' ,1));
         SET  i = i + 1;
       END  WHILE;
       SET  result = ROUND(result,2);
       RETURN  result;
    
     END $$
DELIMITER ;


好了,我们利用我创建的函数以及MYSQL自带的GROUP_CONCAT聚合函数就可以很方便的实现乘法了。

1
2
3
4
5
6
7
8
9
SELECT  seq_type,func_multiple(GROUP_CONCAT(num  ORDER  BY  num  ASC  SEPARATOR  ',' ))  AS  multiple_num  FROM  tb_seq  WHERE  GROUP  BY  seq_type;
+ ----------+--------------+
| seq_type | multiple_num |
+ ----------+--------------+
| yellow   |       168.00 |
| green    |        60.00 |
| red      |      5760.00 |

+ ----------+--------------+
rows  in  set  (0.00 sec)
   






本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/1566281,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
1月前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
66 7
|
1月前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
67 8
|
1月前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
1月前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
58 3
|
2月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
40 1
|
2月前
|
关系型数据库 MySQL Serverless
MySQL函数
最常用的MySQL函数,包括聚合函数,字符串函数,日期时间函数,控制流函数等
43 1
|
2月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
2月前
|
SQL NoSQL 关系型数据库
|
3月前
|
关系型数据库 MySQL 数据库
mysql中tonumber函数使用要注意什么
在处理这类转换操作时,考虑周全,利用提供的高性能云服务器资源,可以进一步提升数据库处理效率,确保数据操作的稳定性和安全性,尤其是在处理大量数据转换和运算密集型应用时。
153 0