Как сделать правильное взаимодействие между двумя sql запросами?

Этот вопрос является отсылкой к моему прежнему вопросу. Вот к чему я пришел:

SELECT id_subject, info::json->>'price' 
FROM subject 
WHERE id_subject IN (SELECT id_subject 
                     FROM review 
                     GROUP BY id_subject) 
ORDER BY ( SELECT count(review) as ii 
           FROM review 
           WHERE review notnull 
           GROUP BY id_subject 
           ORDER BY ii ASC ) DESC;

Этот запрос выдает ошибку

ERROR: more than one row returned by a subquery used as an expression

Но если изменить запрос на

SELECT id_subject, info::json->>'price' 
FROM subject 
WHERE id_subject IN (SELECT id_subject 
                     FROM review 
                     GROUP BY id_subject);

консоль сделает вывод

id_subject ?column?
187 246.32
191 13.63
212 715.44
302 743.3
325 438.0
320 43.5
336 742.7
345 349.1
338 102.5
269 382.44
374 483.2
197 955.4
278 273.62
280 826.26
199 456.88

В общем по моим выводам, это не правильное взаимодействие запросов:

SELECT id_subject, info::json->>'price' 
FROM subject 
WHERE id_subject IN (SELECT id_subject 
                     FROM review 
                     GROUP BY id_subject)

c

SELECT count(review) as ii 
FROM review 
WHERE review notnull 
GROUP BY id_subject 
ORDER BY ii ASC

Ответы (1 шт):

Автор решения: Akina

По-моему, требуется

SELECT subject.id_subject, subject.info::json->>'price' 
FROM subject 
JOIN ( SELECT id_subject, COUNT(review) cnt
       FROM review 
       GROUP BY id_subject ) subquery USING (id_subject)
ORDER BY subquery.cnt DESC
→ Ссылка