2017-01-07 3 views
0

Ich habe eine Tabelle wie dieseWie te einen Prozentsatz der Zeilen in MySQL erhalten

user result 
john + 
mike - 
john - 
rita + 

ich den Prozentsatz der zu wollen - durch Benutzer gruppiert. Also für mein Beispiel muss das Ergebnis sein:

user %min 
john 50% 
mike 100% 
rita 0% 

Ist das in mysql möglich, eine solche Abfrage zu erstellen?

Antwort

2

Verwenden Sie einfach bedingte Aggregation. Hier ist eine einfache Methode:

select user, avg(result = '-') as percent_min 
from t 
group by user; 

Dies gibt das Ergebnis als Wert zwischen 0 und 1, die dann formatiert werden können, wie Sie wünschen.

0

Gordons Antwort impliziert eine Datenbankplattform, die implizit einen Booleschen TRUE auf 1 und einen Booleschen FALSE auf 0 setzt. Dies ist vom Standard nicht vorgeschrieben. Sollten Sie einen Fehler geht so etwas wie laufen in "Funktion avg (boolean) existiert nicht", versuchen Sie einen CASE-Ausdruck:

WITH tb (usr,result) AS (
        SELECT 'john','+' 
     UNION ALL SELECT 'mike','-' 
     UNION ALL SELECT 'john','-' 
     UNION ALL SELECT 'rita','+' 
    ) 
    SELECT 
     usr 
    , AVG(CASE result WHEN '-' THEN 100 ELSE 0 END) AS percent_min 
    FROM tb 
    GROUP BY usr 
    ORDER BY usr; 

Glückliche playing -

Marco

Verwandte Themen