如何在KnexJS原始查询中使用别名

时间:2018-10-31 03:28:59

标签: knex.js

我在KnexJS原始查询中使用别名时遇到问题。

如果我在不使用别名的情况下运行整个查询,则以下部分有效。

  • .count(db.raw(`当finish_time不为null时为'1',否则为'null'的情况)

以下带有别名的部分无效

  • .count(db.raw((case when finish_time is not null then 1 else null end) as count_finished))

这是我要运行的整个查询。

.table("task_history")
.count(db.raw("distinct date"))
.where('store_id', request.params.storeid)
.where('date', '>', function() {
  this.select('date')
    .from(function() {
      this.select('date')
        .table("task_history")
        .first()
        .count('* as count_all')
        .count(db.raw(`(case when
          finish_time is not null
          then 1 else null
          end) as count_finished`))
        .where('store_id', request.params.storeid)
        .groupBy('date')
        .orderBy('count_finished', 'asc')
        .orderBy('date', 'desc')
        .as('get_max_date')
    })
});

有人知道为什么会这样吗?

[更新]:这是我的解决方法。

.select( db.raw("count(case when finish_time is not null then 1 else null end) as count_finished")) 

谢谢。

1 个答案:

答案 0 :(得分:1)

可能您只需要这样做:

.select(knex.raw('count(distinct ??) as bar',  ['columnName']))

示例:https://runkit.com/embed/tt0q08glnjgn