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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL 索引
936. 【mysql】locate函数
936. 【mysql】locate函数
22 2
|
1月前
|
SQL 关系型数据库 MySQL
927. 【mysql】coalesce 函数
927. 【mysql】coalesce 函数
22 3
|
1月前
|
关系型数据库 MySQL
926.【mysql】 date 函数
926.【mysql】 date 函数
66 3
|
1月前
|
关系型数据库 MySQL
925. 【mysql】convert 函数
925. 【mysql】convert 函数
23 3
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
31 0
|
15天前
|
关系型数据库 MySQL 数据库
MySql GROUP_CONCAT使用说明
MySql GROUP_CONCAT使用说明
|
9天前
|
SQL 关系型数据库 MySQL
DQL语言之常见函数(mysql)
DQL语言之常见函数(mysql)
|
16天前
|
SQL 关系型数据库 MySQL
mysql多表查询、函数查询
mysql多表查询、函数查询
|
1月前
|
关系型数据库 MySQL 数据库
【mysql】—— 函数的基本介绍
【mysql】—— 函数的基本介绍
|
1月前
|
关系型数据库 MySQL
922.【mysql】if 函数
922.【mysql】if 函数
19 3