查找每天请求和提供的评级数量
Find number of Ratings requested and provided per day
我有以下列
date | id | score |
score
有 offered
、good
和 bad
.
等选项
如何编写一个查询,给出每天提供的评分数与提供的查询数(得分为 good
或 bad
)。
我不是很清楚你想要从中得到什么输出,但我想你正在寻找类似下面的东西?
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
可能是 varchar
、date
或 timestamp
。在我上面的查询中,我假设 date
是日精度的。如果它像 timestamp
,那么您将需要修改 group by
以提取实际日期。
我有以下列
date | id | score |
score
有 offered
、good
和 bad
.
如何编写一个查询,给出每天提供的评分数与提供的查询数(得分为 good
或 bad
)。
我不是很清楚你想要从中得到什么输出,但我想你正在寻找类似下面的东西?
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
可能是 varchar
、date
或 timestamp
。在我上面的查询中,我假设 date
是日精度的。如果它像 timestamp
,那么您将需要修改 group by
以提取实际日期。