假设我有一组数据,例如
(student_id ,,,,, topic_of_interests)
现在,兴趣的主题可以从远足,阅读和睡眠不等。我需要根据这些兴趣主题对学生进行分组,每个学生在topic_of_interests中都有多个以逗号分隔的条目。我该怎么做呢?
我需要的最终结果是一个映射,这样查询一个感兴趣的主题就会给我所有与之相关的学生。 编辑:数据非常大,我不知道不同兴趣主题的价值。
答案 0 :(得分:1)
这是一种经典的多对多关系。
您需要两个主要表students
,topics
和一个所谓的桥接表(或映射):
create table students_topics (
student_id int references students,
topic_id int references topics,
primary key (student_id, topic_id)
);
如果您想轻松获得此类分析,则应将实际表格重建为上述模型。
使用您的实际数据结构尝试此方法:
select topic, array_agg(student_id)
from (
select student_id, trim(topic) topic
from students,
unnest(string_to_array(topic_of_interests, ',')) topic
) s
group by 1;