mysql 列转行之后,分别计数

表名字是:test_tb_grade
脚本:
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (1, '张三', '2017-02-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (2, '张三', '2017-02-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (3, '张三', '2017-01-01', '失败');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (4, '李四', '2017-01-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (5, '李四', '2017-03-01', '失败');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (6, '李四', '2017-02-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (7, '王五', '2017-01-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (8, '王五', '2017-03-01', '失败');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (9, '王五', '2017-03-01', '失败');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (10, '张三', '2017-02-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (11, '张三', '2017-02-01', '失败');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (12, '张三', '2017-01-01', '无效');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (13, '李四', '2017-01-01', '无效');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (14, '李四', '2017-03-01', '无效');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (15, '李四', '2017-01-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (16, '李四', '2017-03-01', '成功');
INSERT INTO test_tb_grade(id, USER_NAME, REQUEST_DATE, CODE) VALUES (17, '王五', '2017-03-01', '无效');

求得结果如下:

img

请问sql 可以实现吗

img


已实现结果!

分享一篇我写的mysql动态行转列的sql


https://blog.csdn.net/weixin_43151418/article/details/124841383

---普通行转列

SELECT user_name,
  sum(
  CASE
    WHEN code='无效'
    THEN 1
    ELSE 0
  END) AS "无效",
  sum(
  CASE
    WHEN code='成功'
    THEN 1
    ELSE 0
  END) AS "成功",
  sum(
  CASE
    WHEN code='失败'
    THEN 1
    ELSE 0
  END) AS "失败"
FROM test_tb_grade
GROUP BY user_name