快乐学习
前程无忧、中华英才非你莫属!

利用MySQL 的GROUP_CONCAT函数实现聚合乘法

作者:懒得去死     转载至:http://blog.csdn.net/yueliangdao0608/article/details/40344055
 
MySQL 聚合函数里面提供了加,平均数,最小,最大等,但是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法。

先创建一张示例表:

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




插入示例数据:

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





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

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





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


  1. SELECT seq_type,func_multiple(GROUP_CONCAT(num ORDER BY num ASC SEPARATOR ‘,’)) AS multiple_num FROM tb_seq WHERE 1 GROUP BY seq_type;  
  2.   
  3.   
  4. +———-+————–+  
  5. | seq_type | multiple_num |  
  6. +———-+————–+  
  7. | yellow   |       168.00 |  
  8. | green    |        60.00 |  
  9. | red      |      5760.00 |  
  10. +———-+————–+  
  11. rows in set (0.00 sec)  
打赏

未经允许不得转载:同乐学堂 » 利用MySQL 的GROUP_CONCAT函数实现聚合乘法

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

特别的技术,给特别的你!

联系QQ:1071235258QQ群:226134712
error: Sorry,暂时内容不可复制!