mysql 行转列分类统计数量
今天遇到的问题,以下流水表,根据请求渠道和交易类型,统计交易的成功、失败和处理中笔数
数据库表:交易流水表(简化)
流水号 | 请求渠道 | 状态(00:成功 01:失败 02:处理中) | 交易类型 |
---|---|---|---|
N0001 | 01 | 00 | A0 |
N0002 | 02 | 00 | A1 |
N0003 | 01 | 01 | A1 |
N0004 | 02 | 00 | A0 |
N0005 | 02 | 01 | A0 |
N0006 | 02 | 01 | A1 |
统计结果如下:
请求渠道 | 交易类型 | 成功笔数 | 失败笔数 | 处理中笔数 |
---|---|---|---|---|
01 | A0 | 1 | 0 | 0 |
01 | A1 | 0 | 1 | 0 |
02 | A0 | 1 | 1 | 0 |
02 | A1 | 1 | 1 | 0 |
实现思路:
1、先根据渠道和状态统计条数
2、使用行转列函数进行数据转换
select b.channelid as '渠道ID',b.transtype as '交易类型', MAX(CASE b.status WHEN '00' THEN b.count ELSE 0 END) as '成功笔数', MAX(CASE b.status WHEN '01' THEN b.count ELSE 0 END) as '失败笔数', MAX(CASE b.status WHEN '02' THEN b.count ELSE 0 END) as '处理中笔数' from (SELECT a.channelid,a.transtype,a.status,count(*) as count from trans_flow a GROUP BY a.channelid,a.transtype,a.`status`) as b GROUP BY b.channelid,b.transtype