PostgreSQL - orden por una matriz

Tengo 2 tablas: curso que contiene id y nombre de los cursos y tagCourse que contiene etiquetas para cada curso.

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

Me gustaría escribir una función que busque cursos según un conjunto dado de etiquetas y las devuelva ordenadas por cantidad de etiquetas coincidentes. Sin embargo no sé cómo escribirlo correctamente y de manera eficiente. Por favor, ayúdame.

es decir.

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....

Respuestas a la pregunta(2)

Su respuesta a la pregunta