Postgresql
Postgresql 按別名 jsonb 欄位分組
我正在嘗試按別名欄位上的 jsonb 操作的結果進行分組,但遇到了我沒想到的錯誤。
以下工作按預期進行:
select jsonb_build_object('x', 1) as a group by a; select jsonb_build_object('x', 1) as a group by jsonb_build_object('x', 1)#>>'{x}'; a ---------- {"x": 1}
但這給了我一個錯誤:
select jsonb_build_object('x', 1) as a group by a#>>'{x}'; ERROR: column "a" does not exist
這是 postgresql (13.3) 中的錯誤嗎?除了在 group by 中重複整個 select 表達式之外,還有什麼方法可以解決它?
SELECT
僅當別名獨立且不在表達式中使用時,才可以使用別名(或引用列表中位置的數字)。文件對此並不十分清楚;它說的是
如果有歧義,
GROUP BY
名稱將被解釋為輸入列名稱而不是輸出列名稱。
問題是您想使用 json 的值,但您可以在該位置訪問他的值,導致錯誤消息的原因
如果你需要這個,你需要頂部
SELECT a FROM (select jsonb_build_object('x', 1) as a) t1 group by a#>>'{x}';
作為在 Group by 中使用選擇列的另一個選項,不允許您選擇 json 的值,只能選擇列的完整內容
另見手冊