想象一下SQL GROUP BY语句

时间:2018-01-26 13:09:06

标签: sql database group-by

我对GROUP BY语句有疑问。我理解它是如何工作的以及它将做什么,但我无法想象它在我的大脑中(我希望这听起来不太奇怪)。我通过想象学习,但GROUP BY对我来说有些奇怪。

所以后续内容如下:FROM-> WHERE-> GROUP BY-> HAVING-> SELECT ....

假设我有一个数据库"孩子的名字"和他们的父母姓名"。所以有一些父母的名字当然不止一个孩子。

在群体发生的那一刻,桌子上究竟发生了什么?一组中的所有元素将组合成一行对吗?但是当我只剩下1行时,之后出现的SELECT怎么还能算出来?它有点可以解释我的观点究竟是什么。 当我使用SELECT *时,它将显示每组只有1行。当我使用SELECT COUNT(无论如何)时,它会给我1行,但正确的组成员数。但是在SELECT发生之前,该组已经不在1行吗? 我想要想象这个过程都是

1 个答案:

答案 0 :(得分:1)

如果您想考虑group by如何处理数据,您可以考虑以下机制。我想强调的是,实际处理可能会有很大不同;这只是为了说明。

  1. 该表按group by键排序。
  2. 具有相同键的所有行都被视为一个单元。
  3. 然后,单位的group by键在结果集中定义一行。
  4. 其余列从集合中与这些行匹配的行汇总。
  5. 为了说明这一点:

    key value
    a     1
    b     1
    a     2
    

    考虑查询:

    select key, count(*), sum(value)
    from t
    group by key;
    

    第一步排序:

    key value
    a     2  -- only the key is considered for the sort, the remaining columns are not
    a     1
    b     1
    

    分成单位:

    key value
    a     2  -- only the key is considered for the sort, the remaining columns are not
    a     1
    -------
    b     1
    

    定义结果集行:

    Original table          Result set
    key value               key
    a     2                  a
    a     1                  b
    -------
    b     1
    

    添加剩余列的计算:

    Original table          Result set
    key value               key  count(*)   sum(value)
    a     2                  a     2           3
    a     1                  b     1           1
    -------
    b     1
    

    我需要强调这是概念性的 - 并且是实施group by的一种有效方式。但是,SQL查询描述结果集,而不是用于生成结果集的特定处理。