【Mysql的group_concat 与 group by 使用】

需求

通过group by函数查询数据,将另一字段的所有值,全部罗列出来;例如:同一单位具有多个指标,通过单位获取总分,并且罗列出加分和减分的原因。

创建表sql

CREATE TABLE `AQKH`  (
  `F_GUID` int NOT NULL,
  `F_DWBH` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '单位编号',
  `F_ZBLX` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '指标类型',
  `F_ADDF` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '加分',
  `F_CUTF` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '减分',
  `F_ZF` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '总分',
  `F_NOTE` varchar(255) NULL,
  PRIMARY KEY (`F_GUID`)
);
INSERT INTO `AQKH` VALUES (1, '单位1', '教育', '1', '0', NULL, '教育加1分');
INSERT INTO `AQKH` VALUES (2, '单位1', '应急', '1', '2', NULL, '应急加1分,减2分');
INSERT INTO `AQKH` VALUES (3, '单位2', '教育', '6', '1.5', NULL, '单位2教育加6,减1.5');
INSERT INTO `AQKH` VALUES (4, '单位2', '应急', '3', '1', NULL, '单位2教育加3,减1');

在这里插入图片描述

进行逻辑查询

SELECT
	*,
	SUM( F_ADDF ) AS F_JF1,
	SUM( F_CUTF ) AS F_JF2,
	GROUP_CONCAT(F_NOTE SEPARATOR ';') as F_NR -- 用;进行分隔展示
FROM
	AQKH  
GROUP BY
	F_DWBH;

在这里插入图片描述
将单位1和单位2进行分组后,将加减分的原因全部展示到各自单位的一条数据,通过分号(;)进行展示。

需求:原因说明要求每条进行标序号

SELECT
IF ( 
@group_number != CONCAT( F_DWBH), -- order by的条件,分组
@row_number :=0, -- 不是一个组的,序号从0开始
@row_number :=@row_number + 1 -- 是一个组的依次加1
) AS row_number,
@group_number :=CONCAT( F_DWBH) AS group_number,
SUM( F_ADDF ) AS F_JF1,
SUM( F_CUTF ) AS F_JF2,
GROUP_CONCAT(CONCAT_WS('.',IF(@group_number != CONCAT( F_DWBH ), @row_number :=0, @row_number :=@row_number + 1 ),CONCAT( F_NOTE )) SEPARATOR ';' ) AS F_NR -- 同样,分组和行序号条件
FROM AQKH GROUP BY F_DWBH;

问题:Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation ‘<>’

修改编码方式

ALTER TABLE AQKH CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 

猜你喜欢

转载自blog.csdn.net/m0_49762804/article/details/131903494