2016-07-08 20 views
0

Ich habe ein Schema wie dies aus einerimmer Prozentsatz der Spalten basierend auf> 1 Spalte

Abfrage zurück
+------------+-------------+------------+---------+------+ 
| dt   | country  | city  | gender | cnt | 
+------------+-------------+------------+---------+------+ 
| 2016-07-06 | algeria  | a1   | female | 187 | 
| 2016-07-06 | algeria  | a1   | gents | 1045 | 
| 2016-07-06 | algeria  | a2   | female | 212 | 
| 2016-07-06 | algeria  | a2   | gents | 775 | 
+------------+-------------+------------+---------+------+ 

Abfrage, die die obige Abfrage-Ergebnisse:

select DATE(created) as dt,country, city, gender, count(gender) as cnt 
from my_table 
where created>'2016-07-06 00:00:00' 
group by dt,country,city, gender 

erwartete Ergebnis (Frau-Verhältnis in den letzten Spalte pro Kreis pro Stadt Basis)

+------------+-------------+------------+----------+ 
| dt   | country  | city  | f_ratio | 
+------------+-------------+------------+----------+ 
| 2016-07-06 | algeria  | a1   | 0.151 | 
| 2016-07-06 | algeria  | a2   | 0.214 | 
+------------+-------------+------------+----------+ 

ich dies versucht:

select dt as date, (cnt/sum(cnt) * 100) as f_ratio from (
    select DATE(created) as dt, gender, count(gender) as cnt 
    from count_table 
    where created>'2016-07-06 00:00:00' 
    group by dt, gender 
) as inner_t 
group by dt; 

aber es fällt kläglich, wenn es um die Berechnung von Prozent auf der Grundlage von 2 Spalten kommt.

Kann mir bitte jemand helfen?

+0

sein Vielleicht wird Ihnen helfen: https://stackoverflow.com/questions/15746749/mysql-calculate-percentage – niandrei

+0

@niandrei: haben überprüfte alle möglichen mysql Prozent bezogenen Fragen auf SO..not Arbeitsfreund !! ( – NoobEditor

+0

) Dies könnte schneller sein, wenn es direkt die Kerntabellen bewertet. – Strawberry

Antwort

1

Kann so etwas wie dieses

SELECT T.dt as date,T.country,T.City,T.cnt/S.Tot AS f_ratio 
FROM (
     SELECT DATE(created) as dt,country, city, gender, count(gender) as cnt 
     FROM my_table 
     WHERE created>'2016-07-06 00:00:00' 
     GROUP BY dt,country,city, gender 
    ) T 
JOIN 
    (
     SELECT city,SUM(cnt) as Tot 
     FROM (
     SELECT DATE(created) as dt,country, city, gender, count(gender) as cnt 
     FROM my_table 
     WHERE created>'2016-07-06 00:00:00' 
     GROUP BY dt,country,city, gender 
      ) X 
     GROUP BY X.city 
) AS S ON S.City =T.City AND T.gender = 'female' 

SQL FIDDLE

+0

'count_table' an sich ist das Ergebnis einer anderen' select' Abfrage, muss ich 'count_table' durch' select' Anweisung ersetzen? – NoobEditor

+0

Ich kann Sie nicht bekommen .. –

+0

also ist dieses Schema, das ich oben erwähnt habe, ein Ergebnis einer'Auswahl'-Abfrage. Auf diesem Select-Ergebnis muss ich die erforderlichen Daten berechnen. Ich habe versucht, die 'count_table' mit meiner' select' Anweisung zu ersetzen seine Wurffehler !!: \ – NoobEditor

Verwandte Themen