#sql #mongodb
Вопрос:
Я новичок в SQL и MongoDB. Я пытаюсь преобразовать это:
SELECT accountType, ROUND(AVG(balance), 2) avgBalance
FROM customers
WHERE gender="female"
GROUP BY accountType
HAVING COUNT(*) < 140
ORDER BY avgBalance
LIMIT 1
в MongoDB, но я не могу заставить его работать. Я не совсем понимаю, каким должен быть порядок ($group, $match, $project, $round, $avg и т. Д.) И как «РАУНД и СРЕДНИЙ» используются вместе. Вот как должен выглядеть ответ: { «Тип учетной записи» : «тип учетной записи», «Средний баланс» : число десятичных(«9999.99») }
Вот что у меня есть до сих пор:
db.customers.aggregate( [ { $group: { _id: { accountType: "accountType", avgBalance: { $avg: { "balance" } } }, { $match: { count: { $lt: 140 } } }, { gender: "female" }, { $project: { "accountType": { $round: [ $agv: "balance", 2 ] } } }, { $limit: 1 } ] )
Ответ №1:
Направление неплохое, было бы вот это:
db.customers.aggregate([
// WHERE gender="female"
{ $match: { gender: "female" } },
// GROUP BY accountType, SELECT AVG(balance)
{
$group: {
_id: "$accountType",
avgBalance: { $avg: "$balance" },
count: {$sum: 1}
}
},
// HAVING COUNT(*) < 140
{ $match: { count: { $lt: 140 } } },
// SELECT ... AS ...
{
$project: {
accountType: "$_id",
avgBalance: { $round: ["$avgBalance", 2] }
}
},
// ORDER BY avgBalance
{ $sort: { avgBalance: 1 } },
// LIMIT 1
{ $limit: 1 }
])
Комментарии:
1. Спасибо! 🙂 Я немного изменил его, чтобы придать ему правильную форму, но средний баланс дает мне «ноль», и я не знаю, почему. Вот измененный mongo: db.customers.aggregate([ { $соответствие: { пол: «женский» } }, { $группа: { _id: «Тип учетной записи», средний баланс: { $средний: «баланс» }, количество: {$сумма: 1} } }, { $соответствие: { количество: { $lt: 140 } } }, { $проект: { _id: 0, тип учетной записи: «$_id», средний баланс: { $раунд: [«баланс$», 2] }}}, { $сортировка: { среднее значение: 1 } }, { $предел: 1 }])
2. Может быть, из-за этого: «баланс» : десятичное число(«3485.90»)?
3. Пожалуйста, отредактируйте свой вопрос и введите дополнительный код. Пожалуйста, также предоставьте некоторые примеры входных данных. Смотрите мое обновление -> >
avgBalance: { $round: ["$avgBalance", 2] }
.4. Спасибо вам за ваш совет. Я не заметил, что можно отредактировать исходный вопрос. Извини за это. И спасибо вам за ваше обновление, я перепробовал почти все, что мог придумать, но не это.