2016-04-25 20 views
0

idとplayerID、yearとyearID(以下のスキーマ)の両方でこれらのselectステートメントに参加しようとしています。エイリアスHAB - EGも減算します。また、後の階層で除算と減算を実行する前に、両方のselect文で年とIDをグループ化してSUMを集計します。それは私がこれを試してみるときにGでグループ化すると言うと、奇妙に思える。私は、プレイヤーがテーブル内の複数のエントリを持つことができるので、G、単にidと年間でグループに必要いけないと、私たちは前に複数のグループによる操作とマイナスの操作

CREATE EXTERNAL TABLE IF NOT EXISTS fielding 
(playerID STRING ,yearID INT ,teamID STRING ,lgID STRING , 
POS STRING ,G INT ,GS INT , InnOuts INT , PO INT,A INT, E INT, 
DP INT , PB INT , WP INT ,SB INT ,CS INT , ZR INT) ROW 
FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION  '/home/hduser/hivetest/fielding'; 
計算に

Try this: 

SELECT 
    a.playerID AS ID, 
    a.yearID AS yearID, 
    (b.HAB - a.EG) AS `HAB-EG` 
FROM 
    (SELECT 
     SUM(playerID), 
     SUM(yearID), 
     (E/G) AS EG 
    FROM fielding 
    WHERE (
      yearID > 2005 
      AND yearID < 2009 
      AND G > 20 
      )GROUP BY playerID,yearID 
    ) AS a 
JOIN 
    (SELECT 
     SUM(id), 
     SUM(year), 
     (hits/ab) AS HAB 
    FROM batting 
    WHERE( 
      year > 2005 
      AND year < 2009 
      AND ab > 40 
      ) GROUP BY id,year 

    ) AS b ON a.playerID = b.id AND a.yearID = b.year; 

JUSTスキーマG、EHとABを総括する必要があります

JUST SCHEMA

CREATE EXTERNAL TABLE IF NOT EXISTS batting(id STRING, year INT, team STRING, 
league STRING, games INT, ab INT, runs INT, hits INT, doubles INT, triples 
INT, homeruns INT, rbi INT, sb INT, cs INT, walks INT, strikeouts INT, ibb 
INT, hbp INT, sh INT, sf INT, gidp INT) ROW FORMAT DELIMITED FIELDS 
TERMINATED BY ',' LOCATION '/home/hduser/hivetest/batting'; 
+1

あなたのグループがオフになっているようです。非集計値によるグループ化に興味があります。例えば。 'SELECT id、sum(value)GROUP BY id'です。 – ssn

+1

も同様です。なぜあなたは年別にグループ化したいですか?あなたはプレーヤー1人当たりの割合を得た後、またはプレーヤー1人当たりの合計を得ていますか? – ssn

+0

Ahhhh abs right ...私の部分にこのような迷惑なエラーがあります – dedpo

答えて

0

これを試してみてください:

SELECT 
    a.playerID AS ID, 
    a.yearID AS yearID, 
    (b.HAB - a.EG) AS `HAB-EG` 
FROM 
    (SELECT 
     playerID, 
     yearID, 
     (SUM(E)/SUM(G)) AS EG 
    FROM fielding 
    WHERE (
      yearID > 2005 
      AND yearID < 2009 
      AND G > 20 
      )GROUP BY playerID,yearID 
    ) AS a 
JOIN 
    (SELECT 
     id, 
     year, 
     (SUM(hits)/SUM(ab)) AS HAB 
    FROM batting 
    WHERE( 
      year > 2005 
      AND year < 2009 
      AND ab > 40 
      ) GROUP BY id,year 

    ) AS b ON a.playerID = b.id AND a.yearID = b.year;