频率连接声明

时间:2013-09-10 15:34:14

标签: mysql sql

我有两张桌子:

users

id | name
-----------
 1 | user 1
 2 | user 2
 3 | user 3

posts

id | userId | text
--------------------
 1 |      1 | text 1
 2 |      1 | text 2
 3 |      2 | text 3
 4 |      2 | text 4
 5 |      2 | text 5
 6 |      2 | text 6

我需要检索按频率排序的users,例如:

id | name   | posts
-------------------
 2 | user 2 |     4
 1 | user 1 |     1
 3 | user 3 |     0

有些用户可能没有帖子!

目前我有2个查询,分3步执行:

  1. 检索所有用户
  2. 检索按userId
  3. 分组的所有帖子
  4. 使用php加入上述
  5. 问题

    以上是否可以在单个sql查询中进行?

2 个答案:

答案 0 :(得分:3)

select u.id, u.name, count(p.id) as posts
from users u
left join posts p on p.userid = u.id
group by u.id, u.name
order by posts desc

答案 1 :(得分:1)

另一个版本,它阻止在group by子句中列出users表中的所有字段。在许多情况下IMO也更快。

select u.id, u.name, coalesce(c.cnt, 0) as posts
from users u
left join 
  (select userId, couint(*) cnt from posts group by userId) c
on u.id = c.userId