Я пытаюсь получить доступ к указанному разделу c поля JSON в PostgreSQL с помощью функции count, чтобы получить носители со статусом альтернативного текста, присутствует или нет.
Таблицы с данными:
свойства
id cid property_name
1 11 abc
2 11 pqr
3 11 xyz
4 11 ddd
5 11 eee
6 11 fff
marketing_media_associations
id cid property_id media_path details
1 11 1 path1 {"filemeta1":"aa", "media_alt":"media alt text", "filemeta2":"meta2 text"}
2 11 2 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
3 11 3 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
4 11 6 path1 {"filemeta1":"aa", "filemeta2":"meta2 text"}
5 11 6 path1 {"filemeta1":"aa", "media_alt":"media alt text2", "filemeta2":"meta2 text"}
Ожидаемый результат:
id property_name media_alt
1 abc YES
2 pqr NO
3 xyz YES
4 ddd -
5 eee -
6 fff YES
Я пытаюсь выполнить следующий запрос, но он не дает мне ожидаемый результат.
SELECT p.id, p.property_name,
(CASE WHEN COUNT(mma.details->'media_alt' ) > 0 THEN 'YES'
WHEN COUNT(mma.cid) > 0 THEN 'NO'
ELSE '-'
END) as media_alt
FROM properties p
LEFT JOIN marketing_media_associations mma ON ( mma.property_id = p.id AND mma.cid = p.cid )
GROUP BY p.id, p.property_name ORDER BY p.property_name
Как правильно SQL похож?