博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】利用MySQL 的GROUP_CONCAT函数实现聚合乘法
阅读量:6337 次
发布时间:2019-06-22

本文共 1701 字,大约阅读时间需要 5 分钟。

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,如需转载请自行联系原作者
你可能感兴趣的文章
mongorocks引擎原理解析
查看>>
用Swift实现一款天气预报APP(一)
查看>>
oracle11g R2 RAC卸载grid
查看>>
ES6 结构和扩展运算符
查看>>
王利阳:电商大促 决战6.18
查看>>
kafka消息传输的事务定义
查看>>
实现LNMMP
查看>>
mysql的pid文件出现问题
查看>>
计算rem单位
查看>>
第七章 大网高级 ASA
查看>>
rsync+inotify触发式远程同步
查看>>
优秀设计师应当知道的几大UI设计原则(一)
查看>>
mongodb高级查询
查看>>
struts2.1 struts.devMode BUG解决方案
查看>>
日本法院裁定三星诉苹果专利侵权案败诉
查看>>
Windows Server 2012R2 桌面体验问题直通车
查看>>
Springboot配置文件读取报错Configuration property name 'projectUrl' is not valid:
查看>>
HTTP状态码
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>