Vip*_*pal 1 mysql sql postgresql activerecord mysqli
我有两个表用户和任务。我需要获取按Users.Name和Tasks.Status分组的任务计数。我需要一些帮助编写查询来使我的结果与第三张表相似。
用户数
|- Id -|- Name -|
|- 1 -|- Robert -|
|- 2 -|- Bob -|
|- 3 -|- Vicky -|
|- 4 -|- Don -|
|- 5 -|- Ron -|
|- 6 -|- Harry -|
Run Code Online (Sandbox Code Playgroud)
任务
|- Id -|- Status -|- user_id -|
|- 1 -|- Started -|- 1 -|
|- 2 -|- Started -|- 1 -|
|- 3 -|- Started -|- 2 -|
|- 4 -|- Started -|- 2 -|
|- 3 -|- Complete -|- 1 -|
|- 4 -|- Complete -|- 1 -|
|- 5 -|- Complete -|- 2 -|
|- 6 -|- Complete -|- 2 -|
Run Code Online (Sandbox Code Playgroud)
结果
|- Name -|- Status -|- Count -|
|- Robert -|- Complete -|- 2 -|
|- Robert -|- Started -|- 2 -|
|- Bob -|- Complete -|- 2 -|
|- Bob -|- Started -|- 2 -|
|- Vicky -|- Complete -|- 0 -|
|- Vicky -|- Started -|- 0 -|
|- Don -|- Complete -|- 0 -|
|- Don -|- Started -|- 0 -|
|- Ron -|- Complete -|- 0 -|
|- Ron -|- Started -|- 0 -|
|- Harry -|- Complete -|- 0 -|
|- Harry -|- Started -|- 0 -|
Run Code Online (Sandbox Code Playgroud)
如果要在答案中得到零,则需要首先生成行。这是一种获取结果的方法:
select u.name, s.status, count(t.userid) as cnt
from users u cross join
(select distinct status from tasks) s left join
tasks t
on t.userid = u.id and t.status = s.status
group by u.name, s.status
order by u.name, s.status;
Run Code Online (Sandbox Code Playgroud)
请注意,这是标准SQL,因此它将在您标记中的所有数据库中运行。
| 归档时间: |
|
| 查看次数: |
6716 次 |
| 最近记录: |