2017-07-24 4 views
0

Ich habe Schwierigkeiten, eine einzige MySQL-Abfrage zu machen, um Daten aus einer Tabelle zu erhalten, die Informationen über Ergebnisse von Testanforderungen enthält, die Testfälle enthalten. Jeder Testfall kann 4 verschiedene Ergebnisse haben. Struktur sieht aus wie unten (mit Beispieldaten):Abfrage, um gruppierte Informationen aus derselben Tabelle in mehr als einer Spalte und Zeile anzuzeigen

testrequestsresultsID | testrequestsID | testcaseresultsID 
1      | 1    | 4 
2      | 1    | 2 
3      | 1    | 1 
4      | 1    | 1 
5      | 2    | 4 
6      | 2    | 4 
7      | 2    | 2 
8      | 2    | 2 

Mein Hauptziel ist in 4 verschiedenen Säulen Informationen über den Fortschritt der Testanfragen angezeigt werden soll.

  1. Erste Spalte Gesamtzahl der Testanforderungen zeigen sollte,
  2. Zweite Säule fertige Testanforderung zeigen sollte (testcaseresultsID ist anders als 4)
  3. dritte Spalte sollte Anzahl durchlaufener Testfälle zeigen (testcaseresultsID gleich 1)
  4. Forth sollte Spalte zeigen Anzahl der fehlgeschlagenen Testfälle (testcaseresultsID gleich 2)

konnte ich pro einem einen Test reques mit unter Abfrage-ID, dass Informationen bekommen:

SELECT 
(SELECT COUNT(*) AS `count` FROM `testrequestsresults` WHERE `testrequestsID`=1) `total`, 
(SELECT COUNT(*) AS `count` FROM `testrequestsresults` WHERE `testrequestsID`=1 AND `testcaseresultsID`<>4) `finished`, 
(SELECT COUNT(*) AS `count` FROM `testrequestsresults` WHERE `testrequestsID`=1 AND `testcaseresultsID`=1) `pass`, 
(SELECT COUNT(*) AS `count` FROM `testrequestsresults` WHERE `testrequestsID`=1 AND `testcaseresultsID`=2) `fail` 

Dies zeigt Informationen nur für eine Anfrage.

Meine Frage ist, wie erweiterte Informationen für viele Zeilen angezeigt werden und mit einer vorderen Spalte, die testrequestsID zeigt? Es sollte wie folgt unter Berücksichtigung der Beispieldaten angezeigt werden:

testrequestsID | total | finished | pass | fail 
1    | 4  | 3  | 2 | 1 
2    | 4  | 2  | 0 | 2 

Vielen Dank im Voraus für die Hilfe.

Antwort

1
SELECT testrequestsID, 
SUM IF(`testrequestsID`=1, 1,0) as total, 
SUM IF(`testrequestsID`=1 AND `testcaseresultsID`<>4, 1, 0) AS finished, 
SUM IF(`testrequestsID`=1 AND `testcaseresultsID`=1, 1, 0) AS pass, 
SUM IF(`testrequestsID`=1 AND `testcaseresultsID`=2, 1, 0) AS fail 
FROM 
GROUP BY testrequestsID 
0
SELECT testrequestsid 
    , COUNT(*) total 
    , SUM(testcaseresultsid <> 4) finished 
    , SUM(testcaseresultsid = 1) pass 
    , SUM(testcaseresultsid = 2) fail 
    FROM my_table 
GROUP 
    BY testrequestsid; 
+0

Dank. Das funktioniert am besten! – Angpaur

Verwandte Themen