2016-08-09 9 views
0

Ich habe unter Abfrage, für die ich nicht in der Lage, eine entsprechende Kachel zu gestalten. Aber hier ist mein Problem.Berechnung Prozentsatz basierend auf den Werten anderer Zeilen

prv pat id flg 
001 a  SIU 
002 b  OVR 
003 c  NULL 
004 a  NULL 
004 c  NULL 
001 e  SIU 
005 c  SIU 
005 f  SIU 

erwartete Ausgabe

prv   percentage 
004   100% 
003   100% 
002   0% 

Die Logik hier ist 004 prv hat 2 patid dh

004 a  NULL 
004 c  NULL 

Aber patid "a" von 004-001 gehört "a", für die flg ist SIU, und "c" von 004 gehört zu 005 "c" für welches Flag SIU ist. so der Prozentsatz sollte 100%, weil beide patid 004 SIU in anderen Zeilen ist.

similaryly für 003 gibt es 1 row

003 c  NULL 

hier Prozentsatz beträgt 100%, da "C" von 003 patid bis 005 gehört, die SIU-Flag hat, also für 003 seine 100%

Wir berechnen nicht für 001 und 005, weil sie bereits mit SIU patient sind.

Link for sqlfiddle http://www.sqlfiddle.com/#!9/fbd32/6/0

+0

Was zur Hölle machst du da? : D –

+0

Ist es wichtig, Flagge ist SIU oder OVR? oder nur einen Nullwert und keinen Nullwert? –

+1

Auch es ist seltsam 004 zweite patid c gehört auch zu 005 wie 003 Fall, mit Flagge Siu so warum ist es 50% in 004 Fall und 100 in 003? –

Antwort

1

So Ihre letzte Abfrage sollte (funktioniert, getestet) sein:

SELECT 
    main.prv, 
    CONCAT(ROUND(SUM(pat_is_siu)/COUNT(*) * 100),'%') AS percentage 
FROM (
    SELECT 
     a.*, 
     IFNULL((SELECT 1 FROM a AS b WHERE b.`flg` = "SIU" AND b.`pat` = a.`pat` LIMIT 1),0) AS pat_is_siu 
    FROM a 
    WHERE IFNULL(a.`flg`, "") != "SIU" 
) main 
GROUP BY main.`prv` 
+0

Bitte nicht auf Sqlfiddle, wie es auf Timeout geht –

+0

, vielen Dank:) .Ich werde es gegen größere Datenmenge ausführen und siehe – Abid

+0

OK also in diesem Fall fügen Sie bitte Indizes zu den Spalten hinzu, auch wenn Sie bessere präzise Ergebnisse wünschen, sollten Sie das Runden mit 2 Dezimalzahlen wie folgt erweitern: 'ROUND (SUM (pat_is_siu)/COUNT) (*) * 100, 2) '- Hinzufügen', 2' –

0

Sie unter Abfrage versuchen können:

wählen 100/count (pat id) aus der Tabelle, wo flg <> 'SIU' Gruppe von prv

Verwandte Themen