按状态计算所有行

Count all rows by status

我想用这个 table 在 Postgre 中存储票证SQL。

CREATE TABLE TICKET(
 ID INTEGER NOT NULL,
 TITLE TEXT,
 STATUS INTEGER,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

我使用列 'status' 来设置不同的状态(1、2、3、4)。我如何通过一次 SQL 查询按状态统计所有工单?

我希望看到最终结果,例如简单的数字数组:

34, 44, 64, 23
Select status, count(*)
from Ticket
group by status

如果你没有任何门票也必须显示状态。然后我会按照以下步骤操作。 将有一个 table 来存储状态 details.With 同样我们无法知道 Ticket table

中缺少哪个状态

假设 table 状态如下

CREATE TABLE _STATUS(
  STATUS INTEGER,
 STATUS_NAME TEXT
)
;

CREATE TABLE TICKET(
 ID INTEGER NOT NULL,
 TITLE TEXT,
 STATUS INTEGER,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

查询将是

select  s.status,COUNT(t.*)
from _status t left join ticket t
on s.status = t.status
group by s.status
select status, count(*) from ticket group by status;
select status, count(*) from ticket group by status

如果您想要一行中的值,例如:

SELECT 
  COUNT(CASE WHEN status=1 THEN 1 ELSE NULL END) as '1',
  COUNT(CASE WHEN status=2 THEN 1 ELSE NULL END) as '2',
  COUNT(CASE WHEN status=3 THEN 1 ELSE NULL END) as '3',
  COUNT(CASE WHEN status=4 THEN 1 ELSE NULL END) as '4'
FROM TICKET;

但是之后您将不得不使用任何新的状态代码更新您的 SQL。