SQL使用Case创建新结果列?

时间:2013-11-08 00:05:22

标签: sql postgresql

我有这个当前的查询:

enter image description here

导致:

enter image description here

我想把所有这些“status_changes”分开,并在白天将它们分开,以便我可以在白天看到状态变化,并在最后总结它们。它看起来像这样:

enter image description here

这可能吗?我的主要目标是使第12行“count(distinct driver_id)as status_changes”在白天是唯一的,而不是在整个“spot_Check_begin”到“spot_check_end”时间范围内。

也许我错过了可能不同查询的大局?

1 个答案:

答案 0 :(得分:1)

您可以将SUM与CASE WHEN结合使用而不是COUNT。

例如:

SELECT 
sum(CASE WHEN created_at::DATE = CURRENT_DATE THEN 1 ELSE 0 END) as status_changes_1,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '1 day' THEN 1 ELSE 0 END) as status_changes_2,
sum(CASE WHEN created_at::DATE = CURRENT_DATE - interval '2 day' THEN 1 ELSE 0 END) as status_changes_3,
FROM

在开发版本中,我们可以使用带有聚合函数的FILTER (http://www.postgresql.org/docs/devel/static/sql-expressions.html#SYNTAX-AGGREGATES)。我们希望我们能在不久的将来使用它。

count(driver_id) FILTER (WHERE created_at = CURRENT_DATE) AS status_changes_1