【问题标题】:SQLite3 Group By incorrectly returning only 1 rowSQLite3 Group By 错误地只返回 1 行
【发布时间】:2018-07-18 22:05:30
【问题描述】:

我在 node.js 中遇到了 sqlite3 的问题

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

我正在尝试对 itemId 进行分组并获取 avg(price) where provider = "X"。

代码如下:

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);
    }); 
};

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

select distinct(itemId) from dataset where provider = ? 

它返回 8 行。

我尝试在 itemId 上使用 distinct 以及将 itemId 设为 INTEGER 和 TEXT 字段。都没有用。

【问题讨论】:

    标签: sql node.js sqlite group-by


    【解决方案1】:

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

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

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

    【讨论】:

    • 哇...我工作太久了。是你赶上我的失误。有效!
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多