在我们的数据库中,我们有一个coffee_types
表和一个shipments
表。
coffee_types
中的每个咖啡都有roasted_at
个日期,每个货件的日期都为shipped_at
。
我想找到每种咖啡类型的roasted_at
和shipped_at
之间的平均值,这意味着要平均每种咖啡的所有shipped_at - roasted_at
日期。
我该怎么做?我管理的最好的就是这个,但它只是得到每次装运的日期差异:
SELECT coffee_types.name
, date_part('day', age(coffee_types.roasted_at, shipments.shipped_at))
FROM coffee_types, shipments
WHERE coffee_types.id = shipments.coffee_type_id
GROUP BY coffee_types.name, coffee_types.roasted_at, shipments.shipped_at;
答案 0 :(得分:1)
要获得每个咖啡运输的“年龄”,只需减去生成interval
的时间戳 - 或者如果您实际拥有date
列(您的秘密),则减法生成一个简单的{{1 }}:
integer
您不需要SELECT c.name, s.shipped_at - c.roasted_at AS time_passed
FROM coffee_types c
JOIN shipments s ON s.coffee_type_id = c.id
GROUP BY c.name;
功能。 Format the interval你喜欢的任何方式。
要获得烘焙和运输之间的平均时间,请仅按age()
分组 - 或者,确切地说,name
表的任何UNIQUE(组合)列。<登记/>
不 按您想要计算平均值的列进行分组 - 这是您的基本错误:
coffee_types