按状态计算所有行

时间:2016-05-26 10:37:56

标签: sql postgresql postgresql-9.1 postgresql-9.4

我想使用此表在PostgreSQL中存储票证。

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

4 个答案:

答案 0 :(得分:3)

Select status, count(*)
from Ticket
group by status

如果您还必须显示没有任何门票的状态。然后我会按照以下步骤操作。 将有一个表来存储状态详细信息。如果不同,我们无法知道故障单表中缺少哪个状态

假设表格状态如下

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

答案 1 :(得分:2)

select status, count(*) from ticket group by status

答案 2 :(得分:1)

select status, count(*) from ticket group by status;

答案 3 :(得分:0)

如果你想要一行的值,比如:

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。