0

適切な用語を使用していない場合は、お詫び申し上げます。

とにかく、私は2つのテーブルを持っています。1 つは ID と値を持つ項目テーブルです。2 つ目は、アイテム テーブルと修飾子へのリンクを含む mod テーブルです。特定のアイテムに対して複数の修飾子が存在する場合があります。item.value が 100 で、2 つの修飾子がその項目にリンクされている場合 (mod.modifier 値が 1.25 と 1.1 の場合)、135 (100 *(1.25+) ではなく 137.5 (100 *1.25 *1.1) の値を取得したいと考えています。 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
4

1 に答える 1

2

私の知る限り、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() は加算を乗算にマップするためです。

于 2013-08-10T16:02:55.087 に答える