利用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)
时间: 2024-10-08 07:45:27

利用MySQL 的GROUP_CONCAT函数实现聚合乘法的相关文章

【原创】利用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_se

MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

MySQL中group_concat函数-和group by配合使用

MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码 收藏代码 select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+

【转】mysql的group_concat函数,默认最大长度是1024

mysql的group_concat函数,默认最大长度是1024 查询sql: show variables like 'group_concat_max_len'; 设置方式: 修改配置文件my.ini: 在[mysqld]下新增配置:group_concat_max_len = 4294967295; 注意是:在[mysqld]下新增:在[mysqld]下新增:在[mysqld]下新增:重要的事情说三遍. 然后重启mysql服务,然后通过上面的查询sql进行查看是否生效. 如果是生产环境,不

mysql中group_concat函数用法

该函数返回带有来自一个组的连接的非NULL值的字符串结果.该函数是一个增强的Sybase SQL Anywhere支持的基本LIST()函数. 语法结构: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val]) DISTINCT:去除重复值 expr [,expr ...]:一

为什么 MySQL 中 GROUP_CONCAT 函数返回 BLOB 大对象类型?(Why GROUP_CONCAT returns BLOB?)

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 相似的文章列于下方, 我的问题是 CONCAT(字段名, ''),这个用法,就是为了将字段名所代表的数值字段转换成字符串结果. 那么,从以下三楼回

mysql之group_concat函数详解

函数语法: group_concat([DISTINCT] 要连接的字段 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符']) 下面举例说明: select * from goods; 以id分组,把price字段的值在同一行打印出来,逗号分隔(默认) select id, group_concat(price) from goods group by id; 以id分组,把price字段的值在一行打印出来,分红分隔 SELECT id, group_conca

Mysql 的 GROUP_CONCAT() 函数拼接串

SELECT GROUP_CONCAT( ut.id_card ORDER BY ut.id_card DESC SEPARATOR ',' )   FROM `edu_user_train` ut where ut.id in(614,615); 输出结果: 500231199108181861,371324198450304515 使用场景:返回的是纯数字 配合in 查询 例: SELECT u.name FROM `edu_user` u WHERE u.id_card IN (50023

MySQL中group_concat函数

完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 Sql代码   select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ 6 rows in set (0