SQLite3组仅错误地返回1行

时间:2018-07-18 22:05:30

标签: sql node.js sqlite group-by

我在node.js中的sqlite3有问题

我有大约5000行和3列的表格:itemId,provider,price

我正在尝试对itemId进行分组,并在提供者=“ X”的地方获取avg(price)。

代码如下:

var sql = "SELECT itemId, avg(price) from dataset where provider = ? group by ?";

db.each(sql, ["clerk", "itemId"],
    function (err, row) {
        if (err) throw err;
        console.log(row)
    },
    function (err, cntx) {
        if (err) throw err;
        console.log('Number of retrieved rows is ' + cntx);
    }); 
};

问题在于,该语句仅返回where子句中具有第1个itemId的1行,但平均值是整个where子句的平均值。应该返回8行。当我这样做时:

select distinct(itemId) from dataset where provider = ? 

它返回8行。

我尝试在itemId上使用distinct,并将itemId设置为INTEGER和TEXT字段。都不起作用。

1 个答案:

答案 0 :(得分:1)

?用于绑定。像这样使用它时,实际上是按字符串'itemId' 分组,而不是按itemId列分组。由于它是一个常数,因此所有行都具有相同的值,结果是一行。

由于选择列表中有itemId,因此您无法真正更改此值-使用任何其他列都只会导致SQL查询失败,因此您可以在其中明确地编写它:

var sql = "SELECT itemId, avg(price) from dataset where provider = ? group by itemId";