常规SQL - 了解Group BY

时间:2017-09-09 04:12:30

标签: sql group-by hive average

我对GROUP BY有一些麻烦。

  1. SELECT语句中除了聚合函数之外的每个表达式都必须在GROUP BY中吗?
  2. GROUP BY到底在做什么?
  3. 我试图计算客户的平均年龄。

    pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 5, saw 12
    

    因为数据非常大,我做了一个GROUP BY。

    Date| Name|Country|Balance|Age
    2016|Sharp|Iceland|  $200 |29 
    2016|Bob  |Finland|  $100 |22 
    2016|Sharp|Iceland|  $500 |29
    2016|James|USA    |   $10 |21 
    2017|Sharp|Iceland|    $2 |30
    

    然而,这将是什么......它会是:

    SELECT Date, Name, Country, SUM(Balance), Age 
      FROM Table 
     GROUP BY Date, Name, Country, Age
    

    我如何计算平均年龄?

    很困惑, 尖锐。

3 个答案:

答案 0 :(得分:1)

SELECT语句中除了聚合函数之外的每个表达式都必须在GROUP BY中吗?

  • .. select中提到的每个表达式都必须在group by中    必须在其上应用子句或任何聚合函数。但副    反之亦然,即组中的每个表达都不需要选择。

GROUP BY到底在做什么?

  • group by,按照group by子句排列数据并应用聚合 函数在聚合函数中使用的列。

在你的例子中,如你所说,你需要平均年龄,但是group by子句的标准应该是什么?你想要平均年龄日期明智,国家明智,或日期明智和国家明智...

以下是示例查询:

-- date and contry wise both 
select Country,Avg(Age) from demo123
group by Date,Country

-- date wise 
select Date,Avg(Age) from demo123
group by Date 

-- Country wise 
select Country,Avg(Age) from demo123
group by Country 

答案 1 :(得分:0)

我对SQL和编程一般都是新手,但是从我到目前为止所学到的:

GROUP BY从数据库中获取多个列,并将它们压缩到一个组进行分类。 synatax如下: SELECT列名称 从表 需要条件的地方(AVG年龄) GROUP BY列名称

如果您愿意,可以订购它们。我相信你是正确的说,如果你选择列,你将按你选择的相同列进行分组。

这是我用过的参考资料。 SQL info

它没有太深入,但这就是我读它的方式。

希望我说的话可能有所帮助。祝你好运。

芽菜

答案 2 :(得分:0)

Aggregate函数根据Select列表返回输出,所选列必须在GROUP BY子句中。

您需要的查询将是这样的。

SELECT Date, Name, Country, SUM(Balance), AVG(Age) 
FROM Table 
GROUP BY Date, Name, Country