需求
通过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;