1 Fork me on GitHub

22. SQL--group by子句:分组

1. 前言

group by 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。通俗地理解,group by 子句将根据指定的字段合并数据行。

借助 sql 聚合函数,您可以对分组的数据进行再次加工,例如:
sum( ) 函数可以对指定字段的值进行求和
count( ) 函数可以计算某个分组内数据的条数
avg( ) 函数可以对指定字段的值求平均数

2. 语法

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 子句之后。

3. 示例

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

复制代码
+----+----------------+----------------------------+-----+-------+---------+---------+
| id | name           | url                        | age | alexa | uv      | country |
+----+----------------+----------------------------+-----+-------+---------+---------+
|  1 | 百度           | https://www.baidu.com/     |  21 |     4 |  5010.5 | CN      |
|  2 | 淘宝           | https://www.taobao.com/    |  17 |     8 | 3996.75 | CN      |
|  3 | C语言中文网    | http://c.biancheng.net/    |  12 |  7923 |   11.62 | CN      |
|  4 | Google         | https://www.google.com/    |  23 |     1 |   36474 | US      |
|  5 | GitHub         | https://github.com/        |  13 |    95 |   216.3 | US      |
|  6 | Stack Overflow | https://stackoverflow.com/ |  16 |    48 |   592.2 | US      |
|  7 | Yandex         | http://www.yandex.ru/      |  11 |    53 |  591.82 | RU      |
|  8 | VK             | https://vk.com/            |  23 |    23 |    1206 | RU      |
+----+----------------+----------------------------+-----+-------+---------+---------+
复制代码

如果您想知道每个国家网站的总访问量,那么 group by 子句的写法如下:

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 |
+---------+----------+

 

posted @   v_jjling  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
AmazingCounters.com
点击右上角即可分享
微信分享提示