SQL复杂选择

时间:2016-06-17 19:02:30

标签: java mysql sql resultset

我必须弄清楚一个非常复杂的选择。 不知道这是怎么可能的,但我认为是。

有两个表:

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是订阅最多的一个。

那么有人可以帮助我吗?我试了一个小时但没找到解决方案

4 个答案:

答案 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