文章目录
聚合函数和分组查询记录
COUNG()函数 :就散表中记录的条数。
SUM()函数 : 计算字段值的总和。
AVG()函数 : 计算字段值的平均值。
MAX()函数 : 查询表中字段值的最大值。
MIN()函数 :查询表中字段值的最小值。
使用聚合函数查询。
1.COUNT()函数
COUNT(*):计算表中的总记录,不管表中是否包含NULL值。
COUNT(指定字段):计算表中指定字段的记录,在具体统计中忽略NULL值。
实例1(1)
- 题目:查询goods表中的总记录。
查询总记录。
mysql> SELECT COUNT(*) AS goods_num FROM goods;
+-----------+
| goods_num |
+-----------+
| 8 |
+-----------+
1 row in set (0.00 sec)
实例1(2)
- 题目查询goods表中add_time值不为NULL的记录条数。
查询指定字段条数记录。
mysql> SELECT COUNT(add_time) AS goods_num FROM goods;
+-----------+
| goods_num |
+-----------+
| 6 |
+-----------+
1 row in set (0.00 sec)
SUM()函数
实例2
- 题目:查询goods表中商品库存的总和。
查询总和
mysql> SELECT SUM(num) goods_num FROM goods;
+-----------+
| goods_num |
+-----------+
| 140 |
+-----------+
1 row in set (0.00 sec)
AVG()函数
实例3
- 题目:查询goods表中每个商品的平均价格。
查询商品平均价格。
mysql> SELECT type,AVG(price) FROM goods GROUP BY type;
+--------+------------+
| type | AVG(price) |
+--------+------------+
| 书籍 | 40.500000 |
| 水果 | 13.000000 |
| 蔬菜 | 5.000000 |
| 服装 | 65.000000 |
| 冷饮 | 3.000000 |
+--------+------------+
5 rows in set (0.00 sec)
MAX()函数与MIN()函数
实例4
- 题目:查询goods表中商品的最高价格和最低价格。
mysql> SELECT MAX(price) maxpri,MIN(price) minpri FROM goods;
+--------+--------+
| maxpri | minpri |
+--------+--------+
| 65.00 | 3.00 |
+--------+--------+
1 row in set (0.00 sec)
分组查询
1.简单分组查询
实例5(1)
- 题目: 将goods表中的记录按照type字段进行分组,并统计每组的数量。
按指定字段统计数量。
mysql> SELECT type,COUNT(*) FROM goods GROUP BY type;
+--------+----------+
| type | COUNT(*) |
+--------+----------+
| 书籍 | 2 |
| 水果 | 2 |
| 蔬菜 | 2 |
| 服装 | 1 |
| 冷饮 | 1 |
+--------+----------+
5 rows in set (0.00 sec)
实例5(2)
- 题目:将goods表中的记录按type字段分组,并统计每组商品名称。
按指定字段统计商品。
mysql> SELECT type,group_concat(name) FROM goods GROUP BY type;
+--------+---------------------------+
| type | group_concat(name) |
+--------+---------------------------+
| 书籍 | 斗罗大陆,斗破苍穹 |
| 冷饮 | 百事可乐 |
| 服装 | 牛仔裤 |
| 水果 | 火龙果,苹果 |
| 蔬菜 | 胡萝卜,青菜 |
+--------+---------------------------+
5 rows in set (0.00 sec)
使用HAVING过滤后分组
实例 6
- 题目:将goods表中的记录按照type字段分组并统计每组的数量,然后去抽大于1的分组
按指定字段分组统计数量,并取出大于1的分组。
mysql> SELECT type,count(*)FROM goods GROUP BY type HAVING COUNT(*)>1;
+--------+----------+
| type | count(*) |
+--------+----------+
| 书籍 | 2 |
| 水果 | 2 |
| 蔬菜 | 2 |
+--------+----------+
3 rows in set (0.00 sec)
-
WHERE字句与HAVING字句都具有按照条件筛选数据的功能主要区别:
1.WHERE字句在进行分组操作之前用来选择记录,而HAVING字句在进行分组操作之后通过过滤来选择分组。 2.HAVING字句中的每个字段你必须被包含仔SELECT关键字后的字段列表。 3.HAVING字句可以包含聚合函数,但WHERE字句不能。
使用多个字段进行分组
实例7
- 题目:将goods表中的记录按照type和num字段进行分组并统计,显示每个分组的商品类别、库存、商品名称和商品数量。
按多个指定字段进行分组,并取出相应数据。
mysql> SELECT type,num,group_concat(name),count(name) FROM goods GROUP BY type,num;
+--------+------+--------------------+-------------+
| type | num | group_concat(name) | count(name) |
+--------+------+--------------------+-------------+
| 书籍 | 3 | 斗罗大陆 | 1 |
| 书籍 | 17 | 斗破苍穹 | 1 |
| 冷饮 | 12 | 百事可乐 | 1 |
| 服装 | 60 | 牛仔裤 | 1 |
| 水果 | 0 | 苹果 | 1 |
| 水果 | 16 | 火龙果 | 1 |
| 蔬菜 | 5 | 胡萝卜 | 1 |
| 蔬菜 | 27 | 青菜 | 1 |
+--------+------+--------------------+-------------+
8 rows in set (0.00 sec)