2017-07-07 128 views
0

我有一個大的query從多個表中選擇多個列,我想知道有多少記錄(做一個計數)。如何計算在Knex中傳遞子查詢的結果?

我無法得到結果的長度,因爲我還將.offset.limit添加到查詢中。

有沒有一種方法,我可以生成以下

SELECT COUNT(*) FROM (
    knex query 
) as count 

與knex?怎麼樣?

(版本:0.11.10

回答

1

您必須尋找來自users`這個

const knex = require('knex')({ client: 'pg' }) 

const builder = knex 
    .count('t.* as count') 
    // You actually can use string|function with this = knex builder|another knex builder 
    .from(function() { 
     // Your actual query goes here 
     this 
      .select('*') 
      .from('users') 
      .whereNull('some_condition', 'some_value') 
      .as('t') // Alias for your DB (For example Postgres requires that inner query must have an alias) 
    }) 
    .first() 

console.log(builder.toString()) // Prints your query 
// => select count("t".*) from (select * from "users" where "removed_at" is null) as "t" limit 1 
+0

如果您喜歡使用箭頭函數,而不是引用此,構建器也作爲參數傳遞給回調函數。像'.from(builder => builder.from('users')。as('t'))' –

0

從當前網站上的文檔得到這個。

knex('users').count('active as a') 
Outputs: 
select count(`active`) as `a` from `users` 

Knex documentation v 0.13.0

搜索 「SELECT COUNT」 會給你更多的例子。

+0

這會產生'SELECT COUNT(*),但我需要的是'SELECT COUNT(*)FROM(SELECT * FROM用戶)' – BrunoLM

相關問題