我的PostreSQL表如下所示。ordered是布尔列,created_at是时间戳。我试图获取行,这些行告诉我成功订单(count(t))和失败订单(count(f))的总数,以及按日分组的订单总数(t + f) (从created_at提取)。
ordered | created_at t | 2018-10-10 20:13:10 t | 2018-10-10 21:23:11 t | 2018-10-11 06:33:52 f | 2018-10-11 13:13:33 f | 2018-10-11 19:17:11 f | 2018-10-12 00:53:01 f | 2018-10-12 05:14:41 f | 2018-10-12 16:33:09 f | 2018-10-13 17:14:14
我希望得到以下结果
created_at | ordered_true | ordered_false | total_orders 2018-10-10 | 2 | 0 | 2 2018-10-11 | 1 | 2 | 3 2018-10-12 | 0 | 3 | 3 2018-10-13 | 0 | 1 | 1
发布于 2018-10-29 22:59:44
使用聚合函数sum()和count()
select
created_at::date,
sum(ordered::int) as ordered_true,
sum((not ordered)::int) as ordered_false,
count(*) as total_orders
from my_table
group by 1
order by 1
created_at | ordered_true | ordered_false | total_orders
------------+--------------+---------------+--------------
2018-10-10 | 2 | 0 | 2
2018-10-11 | 1 | 2 | 3
2018-10-12 | 0 | 3 | 3
2018-10-13 | 0 | 1 | 1
(4 rows)发布于 2018-10-29 23:30:21
尝试:
SELECT created_at,
COUNT(ordered) filter (where ordered = 't') AS ordered_true,
COUNT(ordered) filter (where ordered = 'f') AS ordered_false,
COUNT(*) AS total_orders
FROM my_table
GROUP BY created_at编辑:使用@klint的答案,如created_at在OP分组的评论中指出的那样,将导致不必要的结果,因为某一天将有几个组(时间戳超过一天)。
https://stackoverflow.com/questions/53055030
复制相似问题