Products
GG网络技术分享 2025-03-18 16:17 0
MySQL存储函数可以让我们将横向排列的数据竖向排列,这样更适合我们进行数据分析。下面我们来介绍一下如何利用MySQL存储函数进行横向转竖向。
DELIMITER $$
CREATE FUNCTION transpose(
IN tableName VARCHAR(128),
IN primaryKey VARCHAR(128),
IN transposeColumn VARCHAR(128),
IN valueColumn VARCHAR(128)
)
RETURNS TEXT
DETERMINISTIC
BEGIN
SET @query = CONCAT(
\'SELECT DISTINCT CONCAT(\\\'\"\\\', \', primaryKey, \', \\\'\"\\\') AS pivot_column, \',
GROUP_CONCAT(
CONCAT(
\'MAX(IF(\', transposeColumn, \' = \\\'\', REPLACE(`\', transposeColumn, \'`\', \'\\\'\', \'\\\'\\\'\'), \'\\\', \\\'\"\\\', \', valueColumn, \', \\\'\"\\\', NULL)) AS \',
CONCAT(\'\\\"\', REPLACE(`\', transposeColumn, \'`\', \'\\\'\', \'\'\\\'), \'\\\"\')
)
ORDER BY transposeColumn
SEPARATOR \',\\n \'
),
\' FROM \', tableName, \' GROUP BY \', primaryKey
);
PREPARE statement FROM @query;
EXECUTE statement;
DEALLOCATE PREPARE statement;
END$$
DELIMITER ;上面的代码中,我们创建了一个名为“transpose”的函数,它接受四个参数:“tableName”(要转置的表名)、“primaryKey”(主键列名)、“transposeColumn”(要转置的列名)和“valueColumn”(每个单元格的值所在的列名)。
在函数内部,我们使用了MySQL的动态查询语句来生成转置后的结果集。首先,我们使用“CONCAT”函数将每个单元格的值转换为字符串,并拼接成一个逗号分隔的字符串,作为结果集的一部分。接着,我们使用“GROUP_CONCAT”函数将这些字符串拼接成最终的结果集。
最后,我们使用“PREPARE”和“EXECUTE”语句来动态执行生成的查询语句,并返回结果。
使用这个函数非常简单,只需要传入四个参数即可:
SELECT transpose(\'my_table\', \'id\', \'month\', \'value\');
上面的代码将会将“my_table”表中的数据转置,主键列为“id”,要转置的列为“month”,每个单元格的值所在的列为“value”。
Demand feedback