查找每天请求和提供的评级数量

Find number of Ratings requested and provided per day

我有以下列

date  |  id  |  score  |

scoreofferedgoodbad.

等选项

如何编写一个查询,给出每天提供的评分数与提供的查询数(得分为 goodbad)。

我不是很清楚你想要从中得到什么输出,但我想你正在寻找类似下面的东西?

SELECT t1.date, t1.all, t2.offered
FROM (SELECT date_trunc('day', date) "date", count(*) "all"
  FROM test
  GROUP BY 1) t1
JOIN (SELECT date_trunc('day', date) "date", count(*) "offered"
  FROM test
  WHERE score = 'offered'
  GROUP BY 1) t2
ON t1.date = t2.date;

这将按日期分组,并输出每个日期的总行数,以及每个日期“分数”为 'offered' 的总行数。 Here's a fiddle of this running

SELECT
   SUM(
       CASE 
           WHEN score IN ('good', 'bad') THEN 1
           ELSE 0
       END
   ) AS good_or_bad
   SUM(
       CASE
           WHEN score = 'offered' THEN 1
           ELSE 0
       END
   ) AS offered
FROM yourtable
GROUP BY date

在上面,我使用 case-when 来确定 score。第一个字段用于 good_or_bad,所以我正在计算分数是好是坏的元素。第二个是 offered,所以我正在计算提供 score 的记录。既然你想group by date,那也加了

注意

date 可能是 varchardatetimestamp。在我上面的查询中,我假设 date 是日精度的。如果它像 timestamp,那么您将需要修改 group by 以提取实际日期。