首页 文章

在多列上使用group by

提问于
浏览
817

我明白 GROUP BY x 的意思

GROUP BY x, y 如何工作,这是什么意思?

2 回答

  • 21

    Group By X 表示 put all those with the same value for X in the one group .

    Group By X, Y 表示 put all those with the same values for both X and Y in the one group .

    为了说明一个例子,假设我们有下表,与谁在大学的哪个科目上学习有关:

    Table: Subject_Selection
    
    Subject   Semester   Attendee
    ---------------------------------
    ITB001    1          John
    ITB001    1          Bob
    ITB001    1          Mickey
    ITB001    2          Jenny
    ITB001    2          James
    MKB114    1          John
    MKB114    1          Erica
    

    仅在主题列上使用 group by 时;说:

    select Subject, Count(*)
    from Subject_Selection
    group by Subject
    

    你会得到类似的东西:

    Subject    Count
    ------------------------------
    ITB001     5
    MKB114     2
    

    ...因为ITB001有5个条目,MKB114有2个条目

    如果我们要 group by 两列:

    select Subject, Semester, Count(*)
    from Subject_Selection
    group by Subject, Semester
    

    我们会得到这个:

    Subject    Semester   Count
    ------------------------------
    ITB001     1          3
    ITB001     2          2
    MKB114     1          2
    

    这是因为,当我们按两列分组时,它会说 "Group them so that all of those with the same Subject and Semester are in the same group, and then calculate all the aggregate functions (计数,求和,平均等) for each of those groups" . 在这个例子中,事实证明了这一点,当我们计算它们时,有第 three 人在第一学期做ITB001,而 two 在第二学期做这件事 . 做MKB114的人都在第一学期,所以没有第二学期的行(没有数据适合组"MKB114, Semester 2")

    希望这是有道理的 .

  • 1685

    GROUP BY子句与聚合函数结合使用,以按一列或多列对结果集进行分组 . 例如 . :

    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    

    记住这个顺序:

    1)SELECT(用于从数据库中选择数据)2)FROM(子句用于列出表)3)WHERE(子句用于过滤记录)4)GROUP BY(子句可以在SELECT语句中使用)跨多个记录收集数据并按一个或多个列对结果进行分组)5)HAVING(子句与GROUP BY子句结合使用,将返回行组限制为只有条件为TRUE的那些)6)ORDER BY (关键字用于对结果集进行排序)

    如果使用聚合函数,则可以使用所有这些,这是必须设置的顺序,否则可能会出错 .

    聚合函数是:

    MIN返回给定列中的最小值SUM返回给定列中数值的总和AVG返回给定列的平均值COUNT返回给定列中的值总数COUNT(*)返回的数量表中的行

相关问题