Knex: Subconsulta na cláusula "de" usando outra instância de knex

Criado em 22 out. 2014  ·  3Comentários  ·  Fonte: knex/knex

Oi!
Eu tenho esta dúvida:

var scores = Bookshelf.knex('audition_vote').sum('voting_power as score').groupBy('audition_id')

e eu quero envolver esta consulta como:

var topScores = Bookshelf.knex.distinct('score').from(function() {
  // This works but i want to use "scores" variable
  this.sum('voting_power as score').from('audition_vote').groupBy('audition_id').as('scores'); 
});

console.log (topScores.toString ()) imprime

select distinct `score` from (select sum(`voting_power`) as `score` from `audition_vote` group by `audition_id`) as `scores

Como usar a variável "pontuação" dentro de () ????

question

Comentários muito úteis

Oh, você pode apenas fazer:

var scores = Bookshelf.knex('audition_vote')
   .sum('voting_power as score')
   .groupBy('audition_id')
   .as('scores');
var topScores = Bookshelf.knex.distinct('score').from(scores.clone());

O .as é ignorado a menos que esteja dentro de uma subconsulta, e o clone só é necessário se você estiver alterando a consulta scores outro lugar.

Ou você pode fazer:

var scores = Bookshelf.knex('audition_vote')
   .sum('voting_power as score')
   .groupBy('audition_id');
var topScores = Bookshelf.knex.distinct('score').from(scores.clone().as('scores'));

Todos 3 comentários

Qual é a consulta que você está procurando gerar?

O último:

select distinct `score` from (select sum(`voting_power`) as `score` from `audition_vote` group by `audition_id`) as `scores`

A consulta está certa, mas quero reutilizar a variável "pontuações"

Oh, você pode apenas fazer:

var scores = Bookshelf.knex('audition_vote')
   .sum('voting_power as score')
   .groupBy('audition_id')
   .as('scores');
var topScores = Bookshelf.knex.distinct('score').from(scores.clone());

O .as é ignorado a menos que esteja dentro de uma subconsulta, e o clone só é necessário se você estiver alterando a consulta scores outro lugar.

Ou você pode fazer:

var scores = Bookshelf.knex('audition_vote')
   .sum('voting_power as score')
   .groupBy('audition_id');
var topScores = Bookshelf.knex.distinct('score').from(scores.clone().as('scores'));
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

marianomerlo picture marianomerlo  ·  3Comentários

npow picture npow  ·  3Comentários

tjwebb picture tjwebb  ·  3Comentários

saurabhghewari picture saurabhghewari  ·  3Comentários

mtom55 picture mtom55  ·  3Comentários