我想把这里找到的游戏标签数据转换成星型模式的维度表。
但问题是steamspy\u tag\u数据表是这样组织的,每个列名都是一个游戏的标签名,一个游戏可以有多个标签。例如,假设我有一个appid30的魔兽争霸3游戏,它会在这样一个表中。
appid|strategy|action|shooter|fantasy|
-----+--------+------+-------+-------
30 6345 1452 0 6340
大于0的列值表示投票给某个游戏的用户票数。对于appid为30-6345的warcraft3游戏,用户投票将其归类为策略,将其归类为动作的用户为1452名。。一些列,例如“abstract”(列)标签在整个列中几乎都是0,这意味着几乎没有游戏使用该标签,因此,为了将372列(行值超过29k)简化为更紧凑的内容,我想运行一个查询,计算每个标记列的非零值,并将它们放入新表“tagovi”中,以便更好地了解哪些列(标记)具有相对较低的游戏使用计数。
到目前为止我想到了这个:
CREATE DEFINER=`root`@`localhost` PROCEDURE `zbroji_tagove`()
BEGIN
DECLARE i INTEGER;
DECLARE total_row_count INTEGER;
DECLARE dummy VARCHAR(255);
DECLARE zbrojeno INTEGER;
DECLARE trenutna VARCHAR(255);
DECLARE kursor CURSOR FOR
SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'sppi' AND table_name = 'steamspy_tag_data'
ORDER BY ordinal_position;
SELECT FOUND_ROWS() into total_row_count;
open kursor;
FETCH kursor into dummy;
SET i = 1;
ponavljanje: LOOP
IF i > total_row_count THEN
CLOSE kursor;
LEAVE ponavljanje;
END IF;
FETCH kursor INTO trenutna;
SET zbrojeno = 0;
SET zbrojeno = (SELECT COUNT(*) FROM steamspy_tag_data where trenutna <> 0);
INSERT INTO tagovi(kategorija,broj_igra)
VALUES (
(trenutna),(zbrojeno)
);
SET i = i + 1;
end LOOP;
END
新表tagovi有3列(id auto\u increment、kategorija varchar(255)、broj\u igra integer)。
当我执行存储过程“zbroji\u tagove”()时,我得到了sql错误代码1292;截断了不正确的双精度值“some\u tag\u name”。因此,sql以某种方式将变量值视为行集合zbrojeno=(select count()from steamspy\u tag\u data where trenutna<>0*)处的值,而不是列;
有没有一种方法可以让我在mysql环境中实现我想要的?
1条答案
按热度按时间vlf7wbxs1#
你不能使用这样的变量,你需要一个准备好的语句
看见