Mysql系列--5、表的基本查询(下)
目录
一、去重数据
二、聚合统计
三、分组聚合统计
一、去重数据
我们可以用select distinct 去重数据将查询到的表插入到新表中再重命名为原来的表名达到去重数据的目的insert into 新表 select distinct * from 原表
-- 创建原数据表
CREATE TABLE duplicate_table (id int, name varchar(20));-- 插入测试数据
INSERT INTO duplicate_table VALUES
(100, 'aaa'),
(100, 'aaa'),
(200, 'bbb'),
(200, 'bbb'),
(200, 'bbb'),
(300, 'ccc');------------------------------------------------------------------------
-- 创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table-- 将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;-- 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table,
no_duplicate_table TO duplicate_table;-- 查看最终结果
SELECT * FROM duplicate_table;
二、聚合统计
select 聚合函数(属性,表达式) from 表名
统计班级共有多少同学
-- 使用 * 做统计,不受 NULL 影响SELECT COUNT(*) FROM students;
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)-- 使用表达式做统计
SELECT COUNT(1) FROM students;
+----------+
| COUNT(1) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)统计班级收集的 qq 号有多少
-- NULL 不会计入结果SELECT COUNT(qq) FROM students;
+-----------+
| COUNT(qq) |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)统计本次考试的数学成绩分数个数
-- COUNT(math) 统计的是全部成绩SELECT COUNT(math) FROM exam_result;
+---------------+
| COUNT(math) |
+---------------+
| 6 |
+---------------+
1 row in set (0.00 sec)统计的是去重成绩数量
SELECT COUNT(DISTINCT math) FROM exam_result;
+------------------------+
| COUNT(DISTINCT math) |
+------------------------+
| 5 |
+------------------------+
1 row in set (0.00 sec)统计数学成绩总分
SELECT SUM(math) FROM exam_result;
+-------------+
| SUM(math) |
+-------------+
| 569 |
+-------------+
1 row in set (0.00 sec)-- 不及格 < 60 的总分,没有结果,返回 NULL
SELECT SUM(math) FROM exam_result WHERE math < 60;
| SUM(math) |
+-------------+
| NULL |
+-------------+
1 row in set (0.00 sec)统计平均总分
SELECT AVG(chinese + math + english) 平均总分 FROM exam_result;
+--------------+
| 平均总分 |
+--------------+
| 297.5 |
+--------------+返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;
+-------------+
| MIN(math) |
+-------------+
| 73 |
+-------------+
1 row in set (0.00 sec)
三、分组聚合统计
在select中使用group by 子句可以对指定列进行分组查询
select column1, column2, .. from table group by column;a.将外部数据导入mysqlsource + 来源路径b.按某列分组后查询信息select max(x) as 最高,avg(y) 平均 from 表名 group by 某列或某些列的属性c.having...对聚合后的数据进行筛选d.where 对任意列进行条件筛选(执行顺序在前)having 对分组聚合后的结果进行条件筛选 (执行顺序在后)