我正在尝试根据他们在辅助注释表中链接到多少注释来对用户表进行排序,我认为子选择将是最好的工具,但我无法使语法正确。
用户表testdata:
id | user_id
1 | 1000
2 | 1001
3 | 1002
评论表testdata
id | link_id
1 | 1002
2 | 1000
3 | 1002
4 | 1000
5 | 1002
6 | 1001
7 | 1000
8 | 1002
第一个表中的预期排序结果为:
id | user_id
3 | 1002
1 | 1000
2 | 1001
任何正确方向的推动都会非常有帮助,谢谢! =)
答案 0 :(得分:3)
实际上,不需要使用子查询。您可以使用JOIN和ORDER BY计数:
SELECT
users.user_id, COUNT(comments.id) as total_messages
FROM
users
INNER JOIN
comments ON comments.link_id = users.id
GROUP BY
user_id
ORDER BY
COUNT(comments.id) DESC
答案 1 :(得分:2)
只是一个带有计数()的连接,然后按计数()的顺序应该这样做
select c.id, user_id, count(*) from user u, comments c where u.id = c.id group by id, user_id
-ace
答案 2 :(得分:1)
SELECT
u.id,
u.user_id
COUNT(u.id) link_count
FROM
Users u,
Comment c
WHERE
c.link_id = u.user_id
ORDER BY
link_count
GROUP BY
u.id,
u.user_id
答案 3 :(得分:0)
SELECT u.id, u.user_id
FROM users u
JOIN ( SELECT link_id, COUNT(*) cnt FROM comment GROUP BY link_id ) c
ON ( c.link_id = u.user_id )
ORDER BY c.cnt DESC
这样您就可以添加users
中的其他列,而无需group by
全部列。