Couchbase中的Unnest和Average操作

时间:2017-11-06 15:58:24

标签: couchbase n1ql

我将以下结构保存在存储桶中:

[
  {
"Grouplens_1M": {
  "genres": [
    "Thriller",
    "Drama"
  ],
  "movieId": 3952,
  "ratings": [
    {
      "rating": 4,
      "userId": 23
    },
    {
      "rating": 5,
      "userId": 36
    },
    {
      "rating": 4,
      "userId": 52
    }
  ],
  "title": "Contender, The (2000)"
    }
  }
]

现在我需要获得平均评分均高于3的所有标题。我发现,我需要取消评级,然后使用AVG获得平均值。但它没有用。在试图弄清楚如何解决这个问题之后,我来到了这个:

SELECT g.title, AVG(r_item.rating) AS avg_r
FROM Grouplens_1M AS g 
UNNEST ratings r_item
WHERE r_item > 4.0
GROUP BY g.title

在查询执行时间后,它会显示一个结果。但是WHERE子句不正确。它似乎忽略了这个陈述,因为它向我展示了所有平均评级的电影。

1 个答案:

答案 0 :(得分:0)

由于您希望根据派生的平均使用HAVING的值过滤掉结果。 WHERE将用于限制为查询考虑的文档。

尝试

SELECT g.title, avg_r 
FROM Grouplens_1M AS g 
UNNEST ratings r_item
GROUP BY g.title
LETTING avg_r = AVG(r_item.rating)
HAVING avg_r > 4.0;