首页 > 解决方案 > SQL将行乘以数组中的每个元素

问题描述

我在 mysql 表中有一些项目,我想将每一行的卡路里字段乘以数组中的每个元素,例如对于数组1,2,2,第一行乘以 1,第二行乘以 2,第三行乘以 2。

示例表:

id | name | calories 
---+------+---------
 1   rice     10
 2   bread    20
 3   apple    15

所以输出会变成:

id | name | calories 
---+------+---------
 1   rice     10
 2   bread    40
 3   apple    30

然后我想得到卡路里的总和。node.js中的SQL语句应该怎么写?req.body.amount是我想将每行卡路里乘以的值数组。

let sum = [req.body.amount, req.body.name];
let sqlquery = "SELECT SUM(? * calories) AS calories FROM food_item WHERE name IN (?)";

标签: mysqlnode.jsexpress

解决方案


使用表的 id 作为数组的索引。

SET @row_number = 0; 
Select t.* , t.calories * factors.factor result
from (
 SELECT 
    (@row_number:=@row_number + 1) AS num,
    T1.*
    from test T1) t
 join (
  select f.* from (
  Select 1 as id, 1 as factor
  union Select 2, 2
  Union Select 3,2
  ) f ) factors
   on t.num = factors.id
    Order by t.id;

分贝小提琴

使用 json 数组:

SET @row_number = -1;
Select t.* ,
json_extract('{"R": [1,2,2]}' ,
             Concat('$.R[',t.num,']') ) jf,
t.calories * 
json_extract('{"R": [1,2,2]}' ,
             Concat('$.R[',t.num,']') ) result
from (
 SELECT 
    (@row_number:=@row_number + 1) AS num,
    T1.*
    from test T1) t
order by t.id;

Db小提琴


推荐阅读