我必须弄清楚一个非常复杂的选择。 不知道这是怎么可能的,但我认为是。
有两个表:
threads :主键是'thread_id'列
订阅:主键是'user'和'thread_id'
我需要一个选择所有线程按排序的选项的选择。
示例情况:
表'thread'中有线程,其中id为1 - 5
订阅表如下所示:
user thread_id
x 1
x 2
y 2
z 4
z 2
你可以看到,大多数订阅的帖子都是2。 我想要一个选择,在其结果中首先使用thread_id 2,因为2是订阅最多的一个。
那么有人可以帮助我吗?我试了一个小时但没找到解决方案
答案 0 :(得分:1)
SELECT thread_id, COUNT(*) AS cpt FROM subscribes GROUP BY thread_id ORDER BY cpt
答案 1 :(得分:1)
只需在thread_id字段上进行分组,然后相应地获取您的计数。虽然不会考虑同一个用户的多个绑定,但如果在此表上允许,那将是一个约束问题。
select thread_id, count(*) as thread_count from threads group by thread_id, order by thread_count desc;
答案 2 :(得分:0)
您可以使用计数和分组
select user, count(*)
from Subscribe
group by thread_id
order by thread_id;
答案 3 :(得分:0)
我认为这是你可能的解决方案
SELECT
s.thread_id, COUNT(DISTINCT s.user) AS total_subscribed
FROM
subscribes s
INNER JOIN threads t
ON s.thread_id = t.thread_id
GROUP BY
s.thread_id
ORDER BY
total_subscribed DESC
如果您没有重复的用户,则不需要DISTINCT