【发布时间】:2015-01-16 14:14:32
【问题描述】:
我发现了几个关于该任务的线程,但都没有真正帮助我,或者我没有足够的经验来理解它。
我正在使用 mysql 并且有两个表 user 和 user_rh。我想要一个用户名列表(按名称排序),并在user_rh 中包含相应数量的条目。
`user` `user_rh`
------------------ ------------------
| `uid` | `name` | | `uid` | `zaid` |
------------------ ------------------
| 1 | Bob | | 2 | 4 |
| 2 | John | | 2 | 7 |
| 3 | Fred | | 3 | 2 |
| 4 | Peter | ------------------
------------------
所以结果应该是这样的:
--------------------
| `name` | `count` |
--------------------
| Bob | 0 |
| Fred | 1 |
| John | 2 |
| Peter | 0 |
--------------------
我试过这个查询:
SELECT
`user`.`name`,
`user_rh`.`uid`
FROM
`user`
LEFT JOIN
`user_rh`
ON (`user_rh`.`uid`=`user`.`uid`)
ORDER BY
`user`.`name`
它以正确的方式进行,但这不会返回计数值:
------------------
| `name` | `uid` |
------------------
| Bob | NULL |
| John | 2 |
| John | 2 |
| Fred | 1 |
| Peter | NULL |
------------------
我以为我只是添加了 COUNT() 和 GROUP BY 命令:
SELECT
`user`.`name`,
COUNT(`user_rh`.`uid`) AS `count`
FROM
`user`
LEFT JOIN
`user_rh`
ON (`user_rh`.`uid`=`user`.`uid`)
GROUP BY
`user_rh`.`uid`
ORDER BY
`user`.`name`
但它向我展示了这样的东西。首先,它提供一个排序后的名称列表,其中包含 count!=0,列表的最后一个条目是表 user 的第一个条目,它具有 count=0。
------------------
| `name` | `uid` |
------------------
| John | 2 |
| Fred | 1 |
| Bob | 0 |
------------------
我想,我只是以错误的方式组合命令。
【问题讨论】:
标签: mysql count group-by left-join