2017-02-05 4 views
0

Hallo Ich bin auf der Suche nach einer Lösung für meine Unfähigkeit zu verstehen, wie ich eine Gesamtsumme für eine Spalte in meiner Abfrage erhalten kann.MYSQL Insgesamt erforderlich für Abfrage

Diese Abfrage ruft Namen von Ingenieuren und die Anzahl von Jobs ab, die außerhalb der SLA liegen, d. H. Die Daten, zu denen der Job abgeschlossen sein sollte, sind vergangen und der Job muss noch abgeschlossen werden.

SELECT Engineer,Job_Status,COUNT(*) as 'Out Of SLA' 
FROM import 
WHERE (Job_Status = 'P' or Job_Status='P2' or Job_Status='P8') 
     and (isnull(Job_Completed_Date) 
      or Job_Completed_Date='0000-00-00') 
      and (Job_SLA_Due_Date < CURDATE() 
     ) 
GROUP BY import.Engineer,Job_Status 

Der obige Code erzeugt die folgenden Ergebnisse aus der Importtabelle.

+----------------+------------+------------+ 
| Engineer | Job_Status | Out of SLA | 
+----------------+------------+------------+ 
| Andy Beeres | P   |   15 | 
| Andy Broad  | P   |   4 | 
| Darren Goodwin | P   |   6 | 
+----------------+------------+------------+ 

Ich möchte die Gesamt Anzahl der Aus SLA-Säule sowie den Rest der Tabellendaten zeigen können, wenn das Sinn so etwas wie die folgende Tabelle macht.

| Engineer  | Job_Status | Out of SLA | 
|------------- |------------ |------------ | 
| Andy Beeres |  P  |   14 | 
|    |  P2  |   3 | 
|    |  P8  |   1 | 
| Total   |    |   18 | 
| Andy Broad | P    |   12 | 
|    | P2   |   2 | 
| Total   |    |   14 | 
| Grand Total |    |   32 | 

Grüße

Alan

+0

'sowie der Rest der Tabellendaten, wenn das macht sense' ... es macht nur Sinn, um die Spalten zu zeigen, mit denen Sie gruppieren, Aggregate oder nicht korrelierte Unterabfragen. Vielleicht können Sie uns zeigen, welche Ausgabe Sie wirklich wollen. –

Antwort

-1

Eine Option ist eine Unterabfrage zu verwenden, die die SLA Gesamt findet:

SELECT Engineer, 
     Job_Status, 
     COUNT(*) AS `Out Of SLA`, 
     (SELECT COUNT(*) FROM import) AS total_sla 
FROM import 
WHERE (Job_Status = 'P' OR Job_Status='P2' OR Job_Status='P8') AND 
     (ISNULL(Job_Completed_Date) OR Job_Completed_Date = '0000-00-00') AND 
     Job_SLA_Due_Date < CURDATE() 
GROUP BY Engineer, 
     Job_Status 
+0

Das ist nicht, was das OP sucht. 'total_sla' sollte die Summe der letzten Spalte sein. –

+0

@ GrzegorzGórkiewicz Sie irren sich. Die Spalte "SLA" ist die Anzahl für jede Gruppe. Daher ist die Summe über die Tabelle hinweg die Zählung der gesamten Tabelle. Aber vielleicht ist meine Antwort falsch, wenn das OP auch etwas anderes möchte. –

+0

@anonymous downvoter: Es ist nicht klar, ob das OP die Summe als einen einzigen Eintrag am Ende der Tabelle oder die Summe in jeder Spalte wünscht. Wenn Letzteres, dann ist meine Antwort eine Option. –

2

Verwenden with rollup mit Gruppe von total_sla

Nach erhalten zu MySql Docs:

Die GROUP BY-Klausel ermöglicht einen WITH ROLLUP-Modifizierer, der dazu führt, dass in der Zusammenfassungsausgabe zusätzliche Zeilen enthalten sind, die zusammenfassende (dh übergeordnete) Übersichtsoperationen darstellen. ROLLUP ermöglicht Ihnen so, Fragen auf mehreren Analyseebenen mit einer einzigen Abfrage zu beantworten.

SELECT Engineer,Job_Status,COUNT(*) as 'Out Of SLA' 
FROM import 
WHERE (Job_Status = 'P' or Job_Status='P2' or Job_Status='P8') 
    and (isnull(Job_Completed_Date) 
     or Job_Completed_Date='0000-00-00') 
     and (Job_SLA_Due_Date < CURDATE() 
    ) 
GROUP BY import.Engineer,Job_Status WITH ROLLUP 
+0

Hallo Ich habe meine ursprüngliche Frage aktualisiert, wenn Sie einen Blick darauf werfen könnten, würde ich es schätzen. –