2016-05-26 9 views
0

Ich möchte diese Tabelle verwenden, um Tickets in PostgreSQL zu speichern.Zählen Sie alle Zeilen nach Status

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

Ich benutze die Spalte 'Status', um den Status (1, 2, 3, 4) einzustellen. Wie kann ich alle Tickets nach Status mit einer SQL-Abfrage zählen?

Ich mag das Endergebnis zum Beispiel wie einfache Anordnung von Zahlen, um zu sehen:

34, 44, 64, 23 
+0

Machen Sie eine GROUP BY, verwenden Sie count (*). – jarlh

Antwort

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

Wenn Sie auch Status ohne Tickets zu zeigen. Dann würde ich die folgenden Schritte befolgen. es wird eine Tabelle zum Speichern von Status details.With aus dem gleichen sein, die wir nicht wissen können, welche Status Ticket Tabelle fehlt

Lassen Sie sagen, der Tabellenstatus wie unten

CREATE TABLE _STATUS(
    STATUS INTEGER, 
STATUS_NAME TEXT 
) 
; 

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

Die Abfrage wird, ist sein

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

Ja, es funktioniert, aber wenn ich keine Tickets mit Status 4 habe, bekomme ich ein leeres Ergebnis. Wahrscheinlich werde ich NPE in Java bekommen. Wie kann ich Status bekommen, auch wenn ich keine Tuckets mit Status 4 habe? –

+0

Haben Sie eine separate Statustabelle? oder 1,2,3,4 sind festgelegt? – Sachu

+0

Es ist in einer Tabellenspalte fixiert - Status. –

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

Können Sie mir ein Beispiel für eine Abfrage zeigen, die dieses Ergebnis '32 21 32 12' erhält? –

+0

Nicht sicher, ob ich – Elyasin

+0

verstehe. Bitte beachten Sie die aktualisierte Post. –

2

Status wählen, count (*) aus dem Kartengruppe durch Status

-1

Wenn Sie die Werte auf einer Zeile, so etwas wie:

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; 

Aber dann werden Sie Ihre SQL aktualisiert mit neuen Statuscodes halten müssen.

+0

Dies ist keine Antwort. Frage ist "Wie kann ich alle Tickets nach Status zählen", aber nicht "In einer Zeile auswählen" –

+0

Es ist genau das was gefragt wurde. OP wollte das Ergebnis in einer Zeile, wie sein Beispiel zeigt. Er betonte dies mit seinem Kommentar zu einer anderen Lösung: "Es stellt sich heraus, dass es sehr viel mehr Spaß machen wird, ein Java-Objekt zu erstellen, wenn ich auf diese Weise" 32 21 32 12 "erhalte. Können Sie mir ein Beispiel einer Abfrage zeigen dieses Ergebnis, bitte? ". Dann wieder in einem anderen mit: "Kannst du mir ein Beispiel für eine Abfrage zeigen, die dieses Ergebnis 32 21 32 12 bekommt?" – ChrisH

Verwandte Themen