【问题标题】:HIVE Group By in Multiple Tables多个表中的 HIVE 分组依据
【发布时间】:2018-08-07 20:42:27
【问题描述】:

两张表 - 'salaries' 和 'master1'

薪水是按年计算的,我可以将它们分组以获得每个球员的总和

SELECT playerID, sum(salary) as sal 
FROM salaries 
GROUP BY playerID ORDER BY sal DESC LIMIT 10; 

这将返回 playerID 和薪水总和,但我需要“nameFirst”和“nameLast”列下的“master1”表中的球员姓名。他们在“master1”和“salaries”中都有“playerID”的公共列,但是当我尝试运行时

SELECT master1.nameFirst, master1.nameLast, sum(salary) as sal 
FROM salaries, master1 
GROUP BY salaries.playerID ORDER BY sal DESC LIMIT 10; 

我得到了错误 表达式不在GROUP BY key 'nameFirst'中

我已经尝试修改它以继续出错。

谢谢!

【问题讨论】:

    标签: sql hive hql


    【解决方案1】:

    首先,您需要使用正确的显式JOIN 语法

    SELECT  
            MAX(m.nameFirst) FirstName,
            MAX(m.nameLast) LastName,
            SUM(s.salary) Salary
    FROM master1 m
    INNER JOIN salaries s ON m.playerID = s.playerID 
    GROUP BY m.playerID 
    

    使用 master1 表获取 FirstNameLastName 并使用 JOIN salariestable 获取每个玩家的总工资。

    对于,当您使用GROUP BY 子句时,您当前的查询异常确保SELECT 语句中的列/表达式 需要被聚合。

    【讨论】:

      【解决方案2】:

      需要在group by中包含nameFirstnameLast

      SELECT 
      master1.nameFirst, 
      master1.nameLast, 
      sum(salary) as sal 
      FROM salaries JOIN master1 ON salaries.playID = master1.playerID
      GROUP BY master1.nameFirst, master1.nameLast, salaries.playerID 
      ORDER BY sal DESC LIMIT 10;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多