PostgreSQL - порядок по массиву

У меня есть 2 таблицы - курс, который содержит идентификатор и название курсов и tagCourse, который содержит теги для каждого курса.

course                    tagcourse
------------            ----------------
PK id_course            PK tag
   name                 PK, FK id_course

Я хотел бы написать функцию, которая ищет курсы по заданному массиву тегов и возвращает их в порядке количества подходящих тегов. Однако я нене знаю, как написать это правильно и эффективно. Пожалуйста, помогите мне.

то есть.

CREATE OR REPLACE FUNCTION searchByTags(tags varchar[])
RETURNS SETOF.....
  RETURN QUERY SELECT * FROM course c INNER JOIN tagcourse tc ON c.id_course = tc.id_course
  WHERE ???  ORDER BY ???

END....

Ответы на вопрос(2)

Ваш ответ на вопрос