2016-03-08 65 views
0

我需要獲取表格中每個明確命名的項目的最小值。例如,對於下表:按功能分組查詢/區別查詢

books 
id| name 
1 | math 
2 | chem 
3 | chem 
4 | chem 
5 | math 

listings 
id|bookID|price 
1 | 1 | 4.35 
2 | 2 | 2.54 
3 | 3 | 1.57 
4 | 4 | 4.91 
5 | 5 | 7.22 

我查詢的結果應該返回:

name | price 
math | 4.35 
chem | 1.57 

這個SQL查詢將

SELECT b.name, MIN(l.price) 
FROM Book b, Listing l 
WHERE b.id = l.bookId 
GROUP BY b.name; 

我有麻煩試圖創建一個相同的查詢,到目前爲止,我已經得到了這個:

models.Listing.aggregate('book.name', 'models.Listing.min(price)', { 
    distinct: true, 
    include: [ 
    { model: models.Book, as: 'book' } 
    ] 
} 
+0

當您這樣做時會發生什麼? –

+0

這會導致一個404,但它真的只是在一起拋出......我沒有很好的理解如何在sequelized構造查詢。 –

回答

0

集合函數使用續集函數(sequelize.fn())在attributes:字段中直接處理。

models.Book.findAll({ 
    attributes: ['name'], 
    include: [ { 
    model: models.Listing, 
    attributes: [[sequelize.fn('MIN', sequelize.col('price'), 'min_price']] 
    } ] 
}) 
.then(function (results) { 
    return results.map(function (book) { 
    return { 
     name: book.name, 
     price: book.listing.get('min_price') 
    }; 
    }); 
}); 

採用sequelize.col,而不是一個字段名字符串,可以確保Sequelize知道你指的是列,而不是在值傳遞。

另外,如果您想從模型中使用別名,則必須添加別名min_price。 (即listing_inst.get('min_price'))。

下面是該文檔的鏈接:http://sequelize.readthedocs.org/en/latest/docs/querying/#attributes

不幸的是,你不能真的只是返回具有從沒有原始查詢兩個表直接(嵌套的)字段的對象。但是,您可以將它們一起擠在then()