对于给定的表:
id | val_a | val_b | mult | category
------------------------------------
0 | 1 | 2 | 9 | A
1 | 0 | 3 | 5 | B
2 | 0.5 | 4 | 6 | C
在MySQL中进行以下查询
SELECT * FROM table WHERE category IN ('A','B','C')
AND IF( val_a > 0, val_a, val_b ) * mult = (SELECT MAX( IF( val_a > 0, val_a, val_b ) * mult ) FROM table WHERE category IN ('A','B','C')) LIMIT 1;
将为每一行找到 val_a *多倍的乘法(如果val_a == 0: val_b *多倍)
0) 1*9 = 9
1) 3*5 = 15
2) 0.5*4 = 2
然后找到所有答案的最大值,最后返回ID:1的行
1) 15
如何在猫鼬中汇总相同内容?即使是部分答案也将有助于前进和学习。 尝试从http://www.querymongo.com/开始,但没有成功。
答案 0 :(得分:1)
您可以将$match与$in配合使用以应用过滤条件,然后将$multiply与$cond配合使用以根据您的公式计算值。最后,您可以将$sort与$limit相加以获得MAX值。试试:
db.col.aggregate([
{
$match: {
category: { $in: [ "A", "B", "C" ] }
}
},
{
$project: {
_id: 1,
value: {
$multiply: [ { $cond: [ { $ne: [ "$val_a", 0 ] }, "$val_a", "$val_b" ] }, "$mult" ]
}
}
},
{
$sort: { value: -1 }
},
{
$limit: 1
}
])
输出:
{ "_id" : 1, "value" : 15 }