Termes, fonctions et concepts SQL |
Opérateurs d'agrégation MongoDB |
OÙ |
|
PAR GROUPE |
|
AYANT |
|
SÉLECTIONNER |
|
COMMANDÉ PAR |
|
LIMITE |
|
SOMME() |
|
COMPTER() |
|
rejoindre |
Pas d'opérateur correspondant direct ; cependant , l' opérateur $unwind permet une fonctionnalité quelque peu similaire, mais avec des champs intégrés dans le document. |
[td]
Exemple SQL |
Exemple MongoDB |
Description |
SELECT COUNT ( * ) AS countFROM commandes |
db.orders.aggregate( [ { $group : { _id : null, count : { $sum : 1 } } } ] ) |
Compter tous les enregistrements des commandes |
SELECT SUM (prix) AS total FROM commandes |
db.orders.aggregate( [ { $group : { _id : null, total : { $sum : "$price" } } } ] ) |
Additionnez le champ prix des commandes, c'est très utile, lisez la description officielle, il est dit que _ID est requis, mais je ne m'attendais pas à ce qu'il soit NULL, |
SELECT id_client, SUM (prix) AS total FROM commandes GROUP BY id_client |
db.orders.aggregate( [ { $group : { _id : "$cust_id", total : { $sum : "$price" } } } ] ) |
Pour chaque uniquecust_id, additionnez le champ de prix. |
SELECT id_client, SUM (prix) AS total FROM commandes GROUP BY id_client ORDER BY total |
db.orders.aggregate( [ { $group : { _id : "$cust_id", total : { $sum : "$price" } } }, { $sort : { total : 1 } } ] ) |
Pour chaque uniquecust_id, additionnez le champ de prix, résultats triés par somme. |
SELECT id_client, ord_date, SUM (prix) AS total FROM commandes GROUPBY id_client, ord_date |
db.orders.aggregate( [ { $group : { _id : { cust_id : "$cust_id", ord_date : "$ord_date" }, total : { $sum : "$price" } } } ] ) |
Pour chaque uniquecust_id, ord_dategrouping, additionnez le champ de prix. |
SELECT id_client, nombre ( * ) FROM commandes GROUP BY id_client HAVING nombre ( * ) > 1 |
db.orders.aggregate( [ { $group : { _id : "$cust_id", count : { $sum : 1 } } }, { $match : { count : { $gt : 1 } } } ] ) |
Pour cust_idavec plusieurs enregistrements, renvoyez lecust_id et le nombre d'enregistrements correspondant. |
SELECT cust_id, ord_date, SUM(price) AS totalFROM ordersGROUPBY cust_id, ord_dateHAVING total > 250 |
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: "$ord_date" }, total: { $sum: "$price" } } }, { $match: { total: { $gt: 250 } } }] ) |
For each uniquecust_id,ord_dategrouping, sum the pricefield and return only where the sum is greater than 250. |
SELECT cust_id, SUM(price) astotalFROM ordersWHERE status ='A'GROUP BY cust_id |
db.orders.aggregate( [ { $match: { status: 'A' } }, { $group: { _id: "$cust_id", total: { $sum: "$price" } } }] ) |
For each uniquecust_id with status A, sum the pricefield. |
SELECT cust_id, SUM(price) astotalFROM ordersWHERE status ='A'GROUP BY cust_idHAVING total > 250 |
db.orders.aggregate( [ { $match: { status: 'A' } }, { $group: { _id: "$cust_id", total: { $sum: "$price" } } }, { $match: { total: { $gt: 250 } } }] ) |
For each uniquecust_id with status A, sum the pricefield and return only where the sum is greater than 250. |
SELECT cust_id, SUM(li.qty) asqtyFROM orders o, order_lineitem liWHERE li.order_id = o.idGROUP BYcust_id |
db.orders.aggregate( [ { $unwind: "$items" }, { $group: { _id: "$cust_id", qty: { $sum: "$items.qty" } } }] ) |
For each uniquecust_id, sum the corresponding line item qtyfields associated with the orders. |
SELECT COUNT(*)FROM (SELECT cust_id, ord_date FROM orders GROUP BYcust_id, ord_date) as DerivedTable |
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: "$ord_date" } } }, { $group: { _id: null, count: { $sum: 1 } } }] ) |