【发布时间】:2019-04-12 22:19:49
【问题描述】:
我有这些数据库表
- 问题:id、文本
- 答案:id、text、question_id
- answer_tags:id、answer_id、tag_id
- 标签:id、文本
- 问题有很多答案
- answer通过answer_tags有很多标签,属于question
- 标签通过 answer_tags 有很多答案
- 答案有无限数量的标签
我想显示按计数排序的标签分组的所有组合
示例数据
Question 1, Answer 1, tag1, tag2, tag3, tag4
Question 2, Answer 2, tag2, tag3, tag4
Question 3, Answer 3, tag3, tag4
Question 4, Answer 4, tag4
Question 5, Answer 5, tag3, tag4, tag5
Question 1, Answer 6, <no tags>
如何使用 SQL 解决这个问题?
我不确定这是否可以通过 SQL 实现,但如果可以,我认为它需要 RECURSIVE 方法。
预期结果:
tag3, tag4 occur 4 times
tag2, tag3, tag4 occur 2 times
tag2, tag3 occur 2 times
我们只会返回分组大于 1 的结果。不会返回单个标签,它必须至少有 2 个标签加在一起才能计算在内。
【问题讨论】:
-
"tag2, tag3, tag4" 在什么意义上是一个pair?为什么 "tag3, tag4, tag5" 和 "tag3, tag5" 在您的预期结果中不是对?
-
很抱歉。我更新了问题。目标是识别不止一次出现的所有分组。 tag2、tag3、tag4 是一个分组,它们出现在 Question1 和 Question2 中。 tag3, tag4, tag5 (Question5) 只出现一次,没有其他问题具有相同的三个标签。这也适用于仅针对 Question5 的 tag3 tag5。对不起,如果我不清楚。
-
我不明白“问题有很多答案”和“一个问题只有一个答案”?
-
不应该是tag3、tag4出现4次(1、2、4、5题)吗?
-
@RyanSparks 哇,你说得对。固定
标签: sql postgresql