mysql 查询请教各位 v2er 一个问题

2021-06-08 23:24:58 +08:00
 Hallelu

表结构大概类似这样。name,time,score,想要的查询是动态的将行值转化为列名,做透视。 我使用了拼接字符串进行,动态的查询,脚本如下

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
 'MAX(IF(a.name = ''',
 a.name,
 ''', a.score, 0)) AS ''',
 a.name, ''''
)
) INTO @sql
FROM student_score a;



SET @sql = CONCAT('Select time,', @sql, 
          ' From `student_score` a Group by a.time' );
PREPARE stmt FROM @sql;  -- 动态生成脚本
EXECUTE stmt;            -- 动态执行脚本
DEALLOCATE PREPARE stmt;

我跑了一下,发现数据量不多的时候,这样查询没问题,当我数据有几十万的时候,转化为列大概有两百多列,就报错了。请教各位 v2er 怎么动态的将几十万数据行值转为列

1059 次点击
所在节点    问与答
3 条回复
akira
2021-06-08 23:44:11 +08:00
先不说这个需求是否合理。

报错信息呢
Hallelu
2021-06-09 08:08:14 +08:00
@akira 报错信息是 max 这个列不存在
uselessVisitor
2021-06-10 10:31:24 +08:00
max 这个为 null 了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/782272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX