mysql - SQL:如何为给定可变长度行名数组的行添加列
问题描述
假设我有一个项目数据库,每个项目都有以下列:name、amount1、amount2、amount3。给定一个名称数组(长度不同),我如何查询数据库以获取指定名称的每一列的每一列的总和?因此,如果我有一个“thing1”和“thing2”的数组,它将从 thing1 和 thing2 返回 amount1 的总和,对于 amount2 和 amount 3 也是如此。
例如:示例数据库:
名称= [事物1,事物2]
查询 = ?
输出 :
我使用了以下查询,但无法弄清楚如何扩展它来处理可变长度的名称数组,也无法处理所有列:
SELECT SUM(amount1) AS Amount1Sum FROM table where name = "thing1" or name ="thing2";
对于一些额外的上下文,这个请求是从 node.js 服务器使用 express 发出的。
这是在我的服务器中实现它的路线(使用下面的建议之一):
app.post("/counter",function(req, res) {
let items = req.body.name
let sqlquery = "SELECT SUM(amount1) as amount1Sum, SUM(amount2) as amount2Sum, SUM(amount3) as amount3Sum FROM table where name in (?)";
// query database
db.query(sqlquery, items, (err, result) => {
if (err) {
return console.error(err.message);
}
console.log(result)
});
});
使用 thing1 和 thing2 检查表单的输出是[ RowDataPacket { amount1Sum: 213, amount2Sum: 5432, amount3Sum: 23} ]
,我确认名称数组确实包含 thing1 和 thing2。它只是返回 thing1 列,而不是为所有名称添加列。
解决方案
使用WHERE name IN (?)
并传递 JS 数组作为对应参数来匹配动态列表。
names = ['thing1', 'thing2'];
connection.query(`SELECT SUM(amount1) AS amount1sum, SUM(amount2) AS amount2sum, SUM(amount3) AS amount3sum
FROM table
WHERE name IN (?)`, [names], function(err, results) {
...
});
推荐阅读
- drupal-7 - 如何在 drupal 7 中为用户活动创建报告
- jquery-ui - 了解 jQuery UI 按钮小部件
- javascript - 无法使用 webpack 4 转换 .marko 文件
- java - 如何使用 lambda 表达式创建满足条件的数组列表
- highcharts - Highchart Y 轴刻度值缺失
- bash - 丢失时在文件末尾添加分号
- java - maven 复制依赖与定义依赖
- c++ - 如何使用 libgit2 编写正确的 git pull
- java - 当我合并使用 Log4j 2 的库时,java.util.logging 停止工作
- selenium - 无法使用 Python 和 Selenium 自动点击