【发布时间】:2019-06-13 03:37:25
【问题描述】:
我有三个表,我正在尝试使用聚合函数和分组依据进行内部连接。我的两个时间表都有一个外键,它引用了空间表的 id。这是我的数据的样子:
Spaces
id address
1 'Address 1, city, state, zip'
2 'Address 2, city, state, zip'
3 'Address 3, city, state, zip'
4 'Address 4, city, state, zip'
5 'Address 5, city, state, zip'
Times1
id1 spaces_id start end
1 1 '10am' '1pm'
2 1 '11am' '7pm'
3 1 '1am' '1pm'
4 2 '10am' '9pm'
5 2 '8am' '1pm'
Times2
id2 spaces_id start end
1 1 '10am' '1pm'
2 1 '11am' '7pm'
3 1 '1am' '1pm'
4 2 '10am' '9pm'
5 2 '8am' '1pm'
我希望我的输出数据看起来像这样(将两个表中的时间组合成一个带有 start 和 end 属性的时间数组):
Combined
id address times
1 'Address 1, city, state, zip' [{start: '10am', end: '1pm'}, {start: '11am', end: '7pm'}, ...]
2 'Address 2, city, state, zip' [{start: '10am', end: '9pm'}, {start: '8am', end: '1pm'}, ...]
3 'Address 3, city, state, zip' [...]
4 'Address 4, city, state, zip' [...]
5 'Address 5, city, state, zip' [...]
我已通过以下查询成功地将这些数据与空间表和 ONE 时间表相结合:
SELECT s.*, JSON_STRIP_NULLS(JSON_AGG(JSON_BUILD_OBJECT('start', t.start, 'end', t.end)))
AS times
FROM spaces s
LEFT OUTER JOIN times t
ON s.id = t.space_id
GROUP BY s.id
【问题讨论】:
-
@TaylerBantle,我的回答有帮助吗?
-
@fphilipe 是的,非常感谢!
标签: database postgresql inner-join aggregate-functions