MySQL中的递归数学

MySQL中的递归数学,mysql,sqlite,math,Mysql,Sqlite,Math,如果我没有使用正确的术语,我道歉 不管怎样,我有两张桌子。一个是具有id和值的项表。第二个是mod表,带有指向item表的链接和一个修饰符。任何给定项都可能有多个修饰符。如果item.value为100,并且两个修饰符与该项链接(例如,mod.modifier值为1.25和1.1),我希望得到值137.5(100*1.25*1.1),而不是135(100*(1.25+1.1)) 这是我到目前为止编写的测试代码: DROP TABLE IF EXISTS item; DROP TABLE IF E

如果我没有使用正确的术语,我道歉

不管怎样,我有两张桌子。一个是具有id和值的项表。第二个是mod表,带有指向item表的链接和一个修饰符。任何给定项都可能有多个修饰符。如果item.value为100,并且两个修饰符与该项链接(例如,mod.modifier值为1.25和1.1),我希望得到值137.5(100*1.25*1.1),而不是135(100*(1.25+1.1))

这是我到目前为止编写的测试代码:

DROP TABLE IF EXISTS item;
DROP TABLE IF EXISTS mod;

CREATE TABLE item (
    item_id INTEGER PRIMARY KEY,
    value DECIMAL
);

CREATE TABLE mod (
    mod_id INTEGER PRIMARY KEY,
    item_id INTEGER,
    modifier DECIMAL
);

INSERT INTO item (item_id, value)
    VALUES (0, 100);
INSERT INTO item (item_id, value)
    VALUES (1, 10);
INSERT INTO item (item_id, value)
    VALUES (2, 1000);

INSERT INTO mod (mod_id, item_id, modifier)
    VALUES (0, 0, 0.25);
INSERT INTO mod (mod_id, item_id, modifier)
    VALUES (1, 0, 0.10);
INSERT INTO mod (mod_id, item_id, modifier)
    VALUES (2, 2, 0.10);
INSERT INTO mod (mod_id, item_id, modifier)
    VALUES (3, 2, 0.05);
INSERT INTO mod (mod_id, item_id, modifier)
    VALUES (4, 2, 0.15);

SELECT item.item_id ID, item.value Value, mod.modifier Mod
    FROM item
    LEFT JOIN mod
    ON item.item_id = mod.item_id;
我希望得到如下结果:

item.item_id    item.value      Result
0               100             137.5
1               10              10
2               1000            1328.25

据我所知,MySQL缺少像这样的内置聚合函数。您可以构建它:

SELECT item.item_id ID, item.value Value, EXP(SUM(LOG10(mod.modifier)), 10) Mod
    FROM item
    LEFT JOIN mod
    ON item.item_id = mod.item_id
GROUP BY item.item_id;

因为log()将加法映射为乘法。

我知道这会起作用,但SQLite似乎不允许使用log或LOG10函数。我一直在尝试添加扩展名functions.c文件,该文件应该会为我提供这些函数,但我还没有运气。或者,我可以创建另一个表来存储mod.modifier的LOG10。我必须手动计算,但我认为它可以工作。我还有别的办法吗?+1。这是关于MySQL而不是SQLite的问题的正确答案。我以为SQLite是MySQL的数据库。我的错误。在我做了更多的研究之后,我将开始一个新的问题。谢谢。@KeiNagase——如果您要添加函数,为什么不添加PROD聚合器呢?