SQL
PostgreSQL

PostgreSQLのJSONB型のときにJSON内部の値でソートする方法

条件

productsテーブルの、product_typesカラムがJSONBであるとき、product_types内にあるJSONが、


[{"name": "awesome", "line_number": 1}]

という形式のとき、この line_number でソートする。product_types内のJSONが配列以外の場合も考慮する。

SQL

SELECT id, product_types
FROM products
ORDER BY
    CASE
        WHEN jsonb_typeof(product_types) = 'array'
        THEN jsonb_array_elements(product_types)->>'line_number'
        ELSE NULL
    END ASC;