我在SQL中有一个表,它是用户登录网站的列表.看起来很像这样:
id | date | status
------------------
Run Code Online (Sandbox Code Playgroud)
如果没有登记,状态可以是0,办理登机手续的情况可以是1,覆盖的情况可以是2,缺勤则可以是3.
我正在尝试构建一个列出所有行的单个查询status = 0,但也有一个COUNT status = 3,表示每个特定的行数id.
这可能吗?
只需加入由id加入的计数.
SELECT t.*, COALESCE(t1.status_3_count, 0) as status_3_count
FROM yourtable t
LEFT JOIN
( SELECT id, SUM(status=3) as status_3_count
FROM yourtable
GROUP BY id
) t1 ON t1.id = t.id
WHERE t.status = 0
Run Code Online (Sandbox Code Playgroud)
注意:这是做布尔值(也就是计数)..表达式返回true或false a 1或0.所以我总结那些以返回每个id的status = 3的计数
SELECT id, SUM(CASE WHEN status = 3 THEN 1 ELSE 0 END) as status_3_count
FROM yourtable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
或者只是使用a WHERE status = 3和aCOUNT(id)