繁体   English   中英

SQL - 如何使用另一个表中的计数进行排序

[英]SQL - How To Order Using Count From Another Table

博主

blogger_id
1 
2
3

2.帖子

post_from_blogger_id
1 
1
1
2
2
3

正如你可以看到博客№1发布超过其他人和博客№3少。 问题是如何构建一个选择所有博主的查询,并根据帖子的数量对它们进行排序?

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM