PostgreSQL – 按数组排序
我有2个表 – 课程包含课程的id和名称以及包含每门课程标签的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.... CREATE OR REPLACE FUNCTION search_by_tags(tags varchar[]) RETURNS TABLE (id_course integer,name text,tag_ct integer) AS $func$ SELECT id_course,c.name,ct.tag_ct FROM ( SELECT tc.id_course,count(*)::int AS tag_ct FROM unnest($1) x(tag) JOIN tagcourse tc USING (tag) GROUP BY 1 -- first aggregate .. ) AS ct JOIN course c USING (id_course) -- .. then join ORDER BY ct.tag_ct DESC -- more columns to break ties? $func$ LANGUAGE sql; >使用
> count()返回 SELECT c.id_course,count(*)::int AS tag_ct FROM unnest($1) x(tag) JOIN tagcourse tc USING (tag) JOIN course c USING (id_course) GROUP BY 1 ORDER BY 3 DESC; -- more columns to break ties? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |