Postgresql我必须返回0

时间:2015-09-02 11:19:57

标签: postgresql

我正在尝试制作一个postgreSQL 9.3查询。问题在这里我必须计算所有评级低于4评级的清洁工。这是我的查询

SELECT count(ratings.score) as below, avg(ratings.score) as avg_rating, cleaners.first_name, cleaners.last_name, cleaners.id, cleaners.created_at
FROM "cleaners"
LEFT JOIN ratings ON ratings.cleaner_id = cleaners.id
GROUP BY cleaners.first_name, cleaners.last_name, cleaners.id, cleaners.created_at

这是以下结果:

{
  "HTTP_CODE": 200,
  "cleaners": [
    {
      "id": 29,
      "rating_below_3_stars": 1,
      "avg_rating": "5.0",
      "first_name": "asen",
      "last_name": "asenov"
    },
    {
      "id": 35,
      "rating_below_3_stars": 2,
      "avg_rating": "2.5",
      "first_name": "Simepl",
      "last_name": "cleaner"
    }
  ]
}

ID为“29”的清洁工,他的rating_below_3_stars必须设为0

我想要的是:

{
  "HTTP_CODE": 200,
  "cleaners": [
    {
      "id": 29,
      "rating_below_3_stars": 0,
      "avg_rating": "5.0",
      "first_name": "asen",
      "last_name": "asenov"
    },
    {
      "id": 35,
      "rating_below_3_stars": 2,
      "avg_rating": "2.5",
      "first_name": "Simepl",
      "last_name": "cleaner"
    }
  ]
}

1 个答案:

答案 0 :(得分:-1)

您只计算低于4的评分

SELECT sum(case when ratings.score<=3 then 1 else null end) as below,
       avg(ratings.score) as avg_rating,
       cleaners.first_name, cleaners.last_name, cleaners.id,
       cleaners.created_at
FROM "cleaners"
LEFT JOIN ratings ON ratings.cleaner_id = cleaners.id
GROUP BY cleaners.first_name, cleaners.last_name, cleaners.id, cleaners.created_at