2016-12-05 3 views
4

Ich versuche vor kurzem, Hive zu lernen, und ich habe ein Problem mit einem sql konsultieren. Ich habe eine JSON-Datei mit einigen Informationen. Ich möchte den Durchschnitt für jedes Register erhalten. Besser in Beispiel:Hive sql: Graf und avg

country times 
USA  1 
USA  1 
USA  1 
ES  1 
ES  1 
ENG  1 
FR  1 

dann mit dem nächsten konsultieren:

select country, count(*) from data; 

I erhalten:

country times 
USA  3 
ES   2 
ENG  1 
FR   1 

dann soll ich als nächstes raus:

country avg 
USA  0,42 (3/7) 
ES  0,28 (2/7) 
ENG  0,14 (1/7) 
FR  0,14 (1/7) 

I don‘ Ich weiß, wie ich das von Anfang an erreichen kann fähig.

Ich habe versucht:

select t1.country, avg(t1.tm), 
from (
    select country,count(*)as tm from data where not country is null group by country 
) t1 
group by t1.country; 

aber mein heraus falsch ist.

Danke für die Hilfe !! BR.

Antwort

0

Teilen Sie die Anzahl der einzelnen Gruppen durch die Gesamtzahl, um das Ergebnis zu erhalten. Verwenden Sie Sub-Query die Gesamtzahl der Datensätze in der Tabelle zu finden

Versuchen Sie, diese

select t1.country, count(*)/IFNULL((select cast(count(*) as float) from data),0) 
from data 
group by t1.country;