【发布时间】:2011-12-09 13:58:53
【问题描述】:
tblticket
身份问题状态
1 测试 1
2 测试 2
3 测试 3
我想根据状态 1、2、3 等来查找计数
我写了3条sql语句如下
从状态=1的票证中选择计数(*)
从状态 = 2 的票证中选择计数(*)
select count(*) from ticket where status=3
任何将其简化为单个查询的方法
【问题讨论】:
tblticket
身份问题状态
1 测试 1
2 测试 2
3 测试 3
我想根据状态 1、2、3 等来查找计数
我写了3条sql语句如下
从状态=1的票证中选择计数(*)
从状态 = 2 的票证中选择计数(*)
select count(*) from ticket where status=3
任何将其简化为单个查询的方法
【问题讨论】:
简单的答案是
select count(*), status
from ticket
group by status
但是,如果您没有状态行,这会产生不同的结果,因为此处记录的行为:Does COUNT(*) always return a result?
假设您只需要 3 个状态值:
select count(t.status), s.status
from
(SELECT 1 AS status UNION ALL SELECT 2 UNION ALL SELECT 3) s
LEFT JOIN
ticket t ON s.status = t.status
group by
s.status
..或使用单独的状态查找表:
select count(t.status), s.status
from
(SELECT DISTINCT status FROM status) s
LEFT JOIN
ticket t ON s.status = t.status
group by
s.status
【讨论】:
SELECT status, COUNT(*)
FROM tblticket
GROUP BY status
如果你真的只想要这三种状态,你也可以这样做:
SELECT status, COUNT(*)
FROM tblticket
WHERE status IN (1, 2, 3)
GROUP BY status
【讨论】: