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)




  • 相关阅读:
    伺服电机常见故障分析汇总
    PLC常见四大故障及其处理方法
    Qt QString的arg()方法的使用
    Qt 线程池QThreadPool类、QRunnable类
    C++线程池的实现
    C++ List的用法
    C++语言堆栈的详细讲解
    QT中的QQueue类、C++中的queue类
    Qt platform plugin 'windows' 问题的解决方法
    电气接地的相关介绍
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5192690.html
Copyright © 2011-2022 走看看