【发布时间】:2011-06-14 15:33:07
【问题描述】:
1.博主
blogger_id
1
2
3
2。帖子
post_from_blogger_id
1
1
1
2
2
3
如您所见,博主 №1 发布的内容比其他博主多,博主 №3 的发帖量少。问题是 如何构建一个查询来选择所有博主并按帖子数量对其进行排序?
【问题讨论】:
标签: sql mysql sql-order-by
1.博主
blogger_id
1
2
3
2。帖子
post_from_blogger_id
1
1
1
2
2
3
如您所见,博主 №1 发布的内容比其他博主多,博主 №3 的发帖量少。问题是 如何构建一个查询来选择所有博主并按帖子数量对其进行排序?
【问题讨论】:
标签: sql mysql sql-order-by
SELECT bloggers.*, COUNT(post_id) AS post_count
FROM bloggers LEFT JOIN blogger_posts
ON bloggers.blogger_id = blogger_posts.blogger_id
GROUP BY bloggers.blogger_id
ORDER BY post_count
(注意:MySQL 有特殊的语法,可以让您在不聚合所有值的情况下进行 GROUP BY,它正是针对这种情况而设计的。
【讨论】:
使用子查询。
select * from (
select post_from_blogger_id, count(1) N from Posts
group by post_from_blogger_id) t
order by N desc
【讨论】:
试试这个:
SELECT B.blogger_id,
B.blogger_name,
IFNULL(COUNT(P.post_from_blogger_id ),0) AS NumPosts
From Blogger AS B
LEFT JOIN Posts AS P ON P.post_from_blogger_id = B.blogger_id
GROUP BY B.blogger_id, B.blogger_name
ORDER BY COUNT(P.post_from_blogger_id ) DESC
这将连接 2 个表,并计算 Posts 表中的条目数。如果没有,则计数为 0 (IFNULL)。
【讨论】:
SELECT b.*
FROM Bloggers AS b
LEFT JOIN (
SELECT post_from_blogger_id, COUNT(*) AS post_count
FROM Posts
GROUP BY post_from_blogger_id
) AS p ON b.blogger_id = p.post_from_blogger_id
ORDER BY p.post_count DESC
【讨论】:
为这个问题尝试 LEFT JOIN
SELECT DISTINCT(Bloggers.blogger_id),
(select count(post_from_blogger_id) from Posts
where Posts.post_from_blogger_id=Bloggers.blogger_id) post_from_blogger_id FROM Bloggers
LEFT OUTER JOIN Posts ON Bloggers.blogger_id=Posts.post_from_blogger_id
ORDER BY post_from_blogger_id DESC
【讨论】:
我遇到了同样的问题。这些答案对我没有帮助。我用了这样一个查询:
SELECT *
FROM company c
ORDER BY (select count(a.company_id) from asset a where a.company_id = c.id) DESC
对于这个问题:
SELECT *
FROM bloggers b
ORDER BY (select count(p.post_from_blogger_id) from posts p where p.post_from_blogger_id = b.blogger_id) DESC
【讨论】: