Так что мой синтаксис, по-видимому, правильный во всех трех случаях (PostgreSQL ни о чем не беспокоится), но результаты возвращаются в том же порядке со всеми тремя этими запросами. Даже более странно, когда я добавляю / удаляю DESC из любого из следующего, это также не оказывает никакого влияния. Можно ли сортировать результаты по элементам подзапроса или нет?
Sort by affiliation
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil)
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008) ORDER BY status.iyear, status.imonth)
Sort by last name, descending order
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil ORDER BY people.slast DESC)
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008))
Sort by year/month descending order
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil )
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008) ORDER BY status.iyear, status.imonth DESC)
Я просто не уверен, почему условия ORDER BY не влияют на порядок результатов.
********* ОБНОВЛЕНИЕ:
В итоге я использовал столбец массива в моем представлении (в данном случае article_view), чтобы выполнить всю мою сортировку. Таким образом, я делаю все свои сортировки по «столбцу» в основном запросе и полностью избегаю использования JOINS. Как определяется представление, все столбцы, соответствующие заданному pubid (первичному ключу) в таблице people / status (оба имеют 1-> many), сохраняются в столбцах массива в представлении. Мой запрос с сортировкой выглядит так:
SELECT * FROM articles_view WHERE
((articles_view.skeywords_auto ilike '%ice%') OR (articles_view.skeywords_manual ilike '%ice%'))
ORDER BY (articles_view.authors[1]).slast
Причина, по которой это работает, заключается в том, что я всегда знаю, что первый член массива (в Postgres первый индекс равен 1, а не обычному 0), это основной автор (или основной статус), который мне нужен для сортировки. .