使用另一个SELECT的COUNT进行SELECT

mat*_*amp 1 mysql sql select

我在SQL中有一个表,它是用户登录网站的列表.看起来很像这样:

id | date | status 
------------------
Run Code Online (Sandbox Code Playgroud)

如果没有登记,状态可以是0,办理登机手续的情况可以是1,覆盖的情况可以是2,缺勤则可以是3.

我正在尝试构建一个列出所有行的单个查询status = 0,但也有一个COUNT status = 3,表示每个特定的行数id.

这可能吗?

Joh*_*ell 8

MySQL VERSION

只需加入由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的计数

SQL SERVER VERSION

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)