zoukankan      html  css  js  c++  java
  • 利用MySQL 的GROUP_CONCAT函数实现聚合乘法

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


    先创建一张演示样例表:

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



    插入演示样例数据:
    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');




    创建基于逗号分隔符的字符串乘法,前提是字符串逗号分隔的都是数字。
    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聚合函数就能够非常方便的实现乘法了。



    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;
    
    
    +----------+--------------+
    | seq_type | multiple_num |
    +----------+--------------+
    | yellow   |       168.00 |
    | green    |        60.00 |
    | red      |      5760.00 |
    +----------+--------------+
    3 rows in set (0.00 sec)




  • 相关阅读:
    Xshell远程连接工具
    Linux系列之常用命令整理笔录
    板卡
    禅道Bug等级划分标准
    CPU与GPU的区别
    PICT用例组合工具简介与使用教程
    alpha测试和beta测试的区别
    性能基础知识学习之八---loadrunner中run-time setting常用功能
    性能基础知识学习之七---loadrunner压测
    性能基础知识学习之六---socket接口测试
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5192690.html
Copyright © 2011-2022 走看看