SUM / IF with INNER JOIN in MySQL--如何把它变成一个 knex 查询?

SUM / IF with INNER JOIN in MySQL--how to turn it into a knex query?

下面的 MySQL 语句按预期工作。感觉很好...但是...

我正在努力解决如何将其放入 knex.js 查询生成器中的问题。我看到的 knex.js 文档中没有“.selectRaw”。我只能用 knex.js 对一列求和。 knex.js 似乎没有解决这个问题。这个想法是对我正在构建的东西有赞成票和反对票。我想知道每个类别的投票,然后是总计(向上 + 向下 = 总计)。我试图避免将其分解为不同的查询。我还没有找到任何好的样本。

有人能帮忙吗?谢谢

    use iconwebsite;
    SELECT 
        i.icon_description,
        SUM(IF(v.vote_score > 0, v.vote_score, 0)) AS up,
        SUM(IF(v.vote_score < 0, v.vote_score, 0)) AS down,
        SUM(IF(v.vote_score, v.vote_score, 0)) AS total
        
    FROM
        icon i
            INNER JOIN
        vote v ON i.icon_id = v.icon_id
    GROUP BY i.icon_description;

您可以将原始 SQL 与 knex 一起用于您的查询:

knex.select(knex.raw(`
    use iconwebsite;
    SELECT 
        i.icon_description,
        SUM(IF(v.vote_score > 0, v.vote_score, 0)) AS up,
        SUM(IF(v.vote_score < 0, v.vote_score, 0)) AS down,
        SUM(IF(v.vote_score, v.vote_score, 0)) AS total
        
    FROM
        icon i
            INNER JOIN
        vote v ON i.icon_id = v.icon_id
    GROUP BY i.icon_description;
`))