Как сделать правильное взаимодействие между двумя 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