SQL GROUP BY子句:分组

1年前 (2024-04-27)
SQL GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被并为一条数据。通俗地理解,GROUP BY 子句将根据指定的字段并数据行。

借助 SQL 聚函数,您可以对分组的数据进行再次加工,例如:

  • SUM( ) 函数可以对指定字段的值进行求和;

  • COUNT( ) 函数可以计算某个分组内数据的条数;

  • AVG( ) 函数可以对指定字段的值求平均数。

语法

GROUP BY 子句的基本语法如下:

SELECT column1, column2
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2

ORDER BY column1, column2

GROUP 子句使用说明:

  • GROUP BY 子句需要和 SELECT 语句一起使用;

  • 如果有 WHERE 子句,那么 WHERE 子句需要放在 GROUP BY 子句之前;

  • 如果有 ORDER BY 子句,那么 ORDER BY 子句需要放在 GROUP 子句之后。

示例

现在有包含如下记录的 website 表:

+----+----------------+----------------------------+-----+-------+---------+---------+

| id | name | url | age | alexa | uv | country |

+----+----------------+----------------------------+-----+-------+---------+---------+

| 1 | 百度 | https://www.baidu.com/ | 21 | 4 | 5010.5 | CN |

| 2 | 淘宝 | https://www.taob网站站点" rel="nofollow" />

SELECT country, SUM(uv) AS total FROM website

GROUP BY country;

SQL AS 关键字用来给字段起一个临时的别名,该别名只显示在结果集中,并不会更改原始表的字段名。执行结果:

+---------+--------------------+

| country | total |

+---------+--------------------+

| CN | 9018.869999885559 |

| RU | 1797.8200073242188 |

| US | 37282.50001525879 |

+---------+--------------------+

您可以使用 TRUNCATE() 函数让小数保留两位数字,具体写法如下:

SELECT country, TRUNCATE(SUM(uv), 2) AS total FROM website

GROUP BY country;

执行结果:

+---------+----------+

| country | total |

+---------+----------+

| CN | 9018.86 |

| RU | 1797.82 |

| US | 37282.50 |

+---------+----------+