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)




  • 相关阅读:
    JavaScript的for循环
    javaScript的执行机制-同步任务-异步任务-微任务-宏任务
    js排他性算法
    js倒计时
    微信小程序 简单获取屏幕视口高度
    小程序scroll-view实现回到顶部
    Vue使用js鼠标蜘蛛特效
    小程序获取当前播放长度和视频总长度,可在播放到某一时长暂停或停止视频
    Django学习笔记
    SQLite简单介绍
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5192690.html
Copyright © 2011-2022 走看看