查詢平均值以上或以下的資料

若 product 資料表中有一份資料內容如下,平均價格經計算後為 198.333333。

[
    { price: 100 },
    { price: 270 },
    { price: 200 },
    { price: 300 },
    { price: 210 },
    { price: 110 }
]

若想要查詢低於平均價格的資料需要使用 aggregation,作法如下。

Stage 1:$group

截圖 2023-08-18 09.32.05

階段一很簡單,就是將全部資料群組後計算 price 的平均值。

Stage 2:$lookup

截圖-2023-08-18-09.32.17

階段二比較複雜,需要使用 $lookup 指令,目的是回頭查詢 product 資料表中 price 低於平均值的資料,所以第一個 from 參數要填 product 資料表名稱。接著在 let 參數中將上一階段的平均值存到一個變數裡面,這裡變數名稱為 avg_price,可以隨意命名。然後使用 pipeline 來查詢 product 中低於平均值(已放到 avg_price 變數中)的資料。這裡因為要使用到變數 avg_price,因此取值的時候要用 $$avg_price,並透過 $expr 才能讀取,如果寫成下面這樣是取不到變數值的,要特別注意。

❌
$match: {
    price: {$lt: "$$avg_price"}
}

發表迴響