我正在研究一個 MTG 資料庫,我正在嘗試獲取用戶擁有的所有卡片的總價值,我正在使用 Sequelize 和 Postgres。我有 4 個關聯表:
Users
__
userId
Cards
__
cardId
CardPrices
___
cardId
usd
UserCard
__
userId
cardId
quantity
我能夠進行查詢并回傳所有用戶的卡片以及相關價格,但我無法弄清楚如何將這些卡片作為單個值相加并在查詢中回傳。我不確定這是否可能。
const userInventory = await db.User.findAll({
attributes: ['id', 'username'],
include: {
model: db.UserCard,
attributes: ['id'],
include: {
model: db.Card,
attributes: ['name'],
include: {
model: db.CardPrice,
attributes: ['usd', 'eur'],
as: 'prices'
}
}
},
});
回傳:
[
{
"id": 1,
"username": "tyler",
"UserCards": [
{
"id": 1,
"quantity": 2,
"Card": {
"name": "Fury Sliver",
"prices": {
"usd": 0.42
}
}
},
{
"id": 2,
"quantity": 1,
"Card": {
"name": "Mystic Skyfish",
"prices": {
"usd": 0.07
}
}
}
]
}
]
在這個例子中,我期待實作inventory_value的0.91
uj5u.com熱心網友回復:
Sequelize 不打算執行復雜的聚合查詢。您要么需要使用普通的 SQL 查詢,要么至少需要使用 SQL 子查詢,User.findAll attributes如下所示:
const userInventory = await db.User.findAll({
attributes: ['id', 'username',
[Sequelize.literal('(SELECT sum(UserCards.quantity*CardPrices.usd) from UserCards join CardPrices on (UserCards.cardId=CardPrices.cardId) where UserCards.userId=Users.id)'), 'inventory_value']],
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408977.html
標籤:
上一篇:SQL陳述句的高效交叉
