寻找可以按功能分组提供 MongoDB 类输出的 Postgres 查询
Looking for Postgres query which can provide output like MongoDB group by function
产品table
|_id|name |
|---|------|
|3 |Laptop|
尺码table
|_id|product_id|size|
|---|----------|----|
|5 |3 |15 |
|6 |3 |17 |
查询:
select tp._id, tp.name, ts.size from test_product tp
left join test_size ts on tp._id = ts.product_id
group by tp._id, tp.name, ts.size
where tp._id = 3 limit 10 offset 0
当前输出:
|_id|name |size|
|---|------|----|
|3 |Laptop|15 |
|3 |Laptop|17 |
预期输出
|_id|name |size |
|---|------|-------|
|3 |Laptop|[15,17]|
注:
由于当前查询,我得到了同一产品的 2 条记录,并且我的限制和偏移量查询逻辑变得错误并且没有得到正确的计数。我不太了解 Postgres 对这种情况的查询。所以我需要解决这个问题,这样我的限制和偏移逻辑对于获取数据是正确的,对于这个查询,我的产品数量将是 1。
使用array_agg():
SELECT
tp._id,
tp.name,
ARRAY_AGG(ts.size ORDER BY ts.size) -- ORDER BY to get consistent results
FROM
test_product tp
LEFT JOIN test_size ts ON tp._id = ts.product_id
GROUP BY
tp._id,
tp.name
WHERE
tp._id = 3
LIMIT 10
OFFSET 0;
聚合中的 ORDER BY 是可选的,但一次又一次地获得一致的结果总是很好。
产品table
|_id|name |
|---|------|
|3 |Laptop|
尺码table
|_id|product_id|size|
|---|----------|----|
|5 |3 |15 |
|6 |3 |17 |
查询:
select tp._id, tp.name, ts.size from test_product tp
left join test_size ts on tp._id = ts.product_id
group by tp._id, tp.name, ts.size
where tp._id = 3 limit 10 offset 0
当前输出:
|_id|name |size|
|---|------|----|
|3 |Laptop|15 |
|3 |Laptop|17 |
预期输出
|_id|name |size |
|---|------|-------|
|3 |Laptop|[15,17]|
注: 由于当前查询,我得到了同一产品的 2 条记录,并且我的限制和偏移量查询逻辑变得错误并且没有得到正确的计数。我不太了解 Postgres 对这种情况的查询。所以我需要解决这个问题,这样我的限制和偏移逻辑对于获取数据是正确的,对于这个查询,我的产品数量将是 1。
使用array_agg():
SELECT
tp._id,
tp.name,
ARRAY_AGG(ts.size ORDER BY ts.size) -- ORDER BY to get consistent results
FROM
test_product tp
LEFT JOIN test_size ts ON tp._id = ts.product_id
GROUP BY
tp._id,
tp.name
WHERE
tp._id = 3
LIMIT 10
OFFSET 0;
聚合中的 ORDER BY 是可选的,但一次又一次地获得一致的结果总是很好。