2016-07-17 9 views
0

ich eine Tabelle mit dem Schema haben, wie unten dargestellt:erhalte eine Fehlermeldung, während ein Hive Abfrage ausführt, die eine Unterabfrage in der FROM-Klausel beinhaltet

CREATE TABLE Table1 (`membertype` varchar(1)); 

INSERT INTO Table1 (`membertype`) 
VALUES 
    ('Y'),('H'),('U'),('W'),('W'),('W'),('H'),('H'),('U'), 
    ('U'),('P'),('P'),(''),('P'),('P'),('P'),(''),('W'), 
    ('Y'),('Y'),('Y'),('H'),('D'),('D'),('D'),('D'),('H'), 
    ('W'),('W'); 

Was ich versuche zu erreichen, ist die Anzahl der jeweils zu bekommen Geben Sie die Spalte und ihren Prozentsatz in die Gesamtzahl der Typen in der Spalte ein.

ich die folgende Abfrage in MYSQL getestet und bekam das gewünschte Ergebnis:

select (case when m.membertype='Y' then 'Young Adult' 
    when m.membertype='H' then 'Head' 
    when m.membertype='W' then 'Spouse' 
    when m.membertype='P' then 'Aged Parent' 
    when m.membertype='U' then 'Unknown' 
    when m.membertype='D' then 'Deceased' else 'No Match' end) as type, 
    count(*) as typecount, 
    count(*)/t.total*100 as percentage from Table1 as m, 
    (select count(*) as total from Table1) as t group by membertype; 

type  typecount percentage 
No Match  2   6.8966 
Deceased  4   13.7931 
Head   5   17.2414 
Aged Parent 5   17.2414 
Unknown  3   10.3448 
Spouse  6   20.6897 
Young Adult 4   13.7931 

**

Link

**

Die gleiche Abfrage schlägt mit der unten in HIVE Fehler:

select (case when h.member='Y' then 'Young Adult' 
when h.member='H' then 'Head' 
when h.member='W' then 'Spouse' 
when h.member='P' then 'Aged Parent' 
when h.member='U' then 'Unknown' 
when h.member='D' then 'Deceased' else 'No Match' end) as type, 
count(*) as typecount, 
count(*)/t.total*100 as percentage from hhinfo as h, 
(select count(*) as total from hhinfo) as t group by member; 


FAILED: SemanticException [Error 10025]: Line 1:277 Expression not in GROUP BY key 'total' 

Was fehlt mir hier? Jede Hilfe wäre willkommen.

+0

hinzufügen Haben Sie versucht, explizit by' Klausel 'total' zum' Gruppe hinzufügen? '... als t Gruppe für Mitglied, total' –

+0

Wie dumm von mir .. Das hat den Trick gemacht. Vielen Dank @JaimeCr :) –

Antwort

0

Versuchen explizit total zum group by clause

...as t group by member, total

+0

Danke nochmal Buddy :) –