我有这样的疑问:
SELECT p.*, po.product_options
FROM product p
LEFT JOIN (
SELECT po.p_id,
json_agg(
json_build_object('id', po.id, 'name', po.name, 'options', pom.option_name)) AS product_options
FROM product_options po
INNER JOIN (
SELECT product_options_id, json_agg(option_name) as option_name
FROM product_options_value
GROUP BY product_options_id
) pom ON pom.product_options_id = po.id
GROUP BY p_id
) po ON po.p_id = p.id
WHERE p.id = 1;
字符串
这是一个db fiddle:
http://sqlfiddle.com/#!17/b47e3b/8
现在我想从表product_options
中按列s_position
对行进行排序。我得到:
错误:列“po.s_position”必须出现在GROUP BY子句中或在聚合函数中使用
但是如果我将列添加到GROUP BY
中,我会得到2行而不是1行。我如何在表product_options
中按s_position
排序,以便仍然得到相同的结果,但具有有序的选项?
1条答案
按热度按时间ffdz8vbo1#
在子查询中按照
p_id
聚合来自product_options
的所有行后,尝试按product_options.s_position
排序将是不明确的。因此您看到了错误消息。要按照
s_position
设置的顺序聚合product_options
中的行,请执行以下操作:字符串
fiddle
或者,您可以在一个额外的子查询中对行进行排序,这样通常会更快。请参阅: