gpt4 book ai didi

mysql - MySQL 中的递归数学

转载 作者:行者123 更新时间:2023-11-29 08:25:11 25 4
gpt4 key购买 nike

如果我使用的术语不正确,我深表歉意。

无论如何,我有两张 table 。一种是带有 id 和 value 的项目表。第二个是 mod 表,其中包含指向项目表和修饰符的链接。任何给定项目可能有多个修饰符。如果 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() 将加法映射为乘法。

关于mysql - MySQL 中的递归数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com