1、group by 理解:

从一个例题开始:

已知表格:Product(maker, type, model)

Get the makers who produce only one product type and more than one model. Output: maker, type.

即找出:1个type,>1个model的maker,输出: maker, type

答案:

select distinct maker, type

from Product

where maker in

(select maker from Product

group by maker

having count(distinct type)=1 and count(distinct model)>1);

分析:

① SQL中distinct和group by去重区别:

distinct必须放在开头,将所有查询的字段进行对比,所有字段都完全相同才会去重;

group by 根据字段进行去重,字段相同就会去重。

② 当group by 字段1,字段2,(注意整个表中不止这两个字段),表示数据集中,字段1相等,字段2也相等的数据归为一组,只显示一条数据。那么你可以对字段3进行统计(求和,求平均值等);

对应的,group by 单个字段:这个字段相等的数据将归为一组,只显示一条记录。

③ 理解:group by maker后,type和model都是多个值形成一格,每个不同的maker形成一列,然后用having来进行聚合和筛选。

④ group by 哪个字段,可以select这个字段,不会报错!理解:group by 字段1,查询结果中,字段1会形成单独一列,具有列名!所以,可以被select提取出来。

举例理解:

对于某原表表1,表名为test,想要执行:

select name from test

group by name

可是为了能够更好的理解“group by”,建议在思考的过程中,增加一个虚构的中间表:虚拟表3。

1)如果执行select * 的话,那么返回的结果应该是虚拟表3,可是id和number中有的单元格里面的内容是多个值的,而关系数据库就是基于关系的,单元格中是不允许有多个值的,所以你看,执行select * 语句就报错了。

2)再看name列,每个单元格只有一个数据,所以我们select name的话,就没有问题了。

3)那么对于id和number里面的单元格有多个数据的情况怎么办呢?答案就是用聚合函数,聚合函数就用来输入多个数据,输出一个数据的。如cout(id),sum(number),而每个聚合函数的输入就是每一个多数据的单元格。

4)例如我们执行select name,sum(number) from test group by name,那么sum就对虚拟表3的number列的每个单元格进行sum操作,例如对name为aa的那一行的number列执行sum操作,即2+3,返回5,最后执行结果如下:

5)group by 多个字段该怎么理解呢:如group by name, number

---我们可以把name和number看成一个整体字段,以他们整体来进行分组的。

如执行

select name,sum(id)

from test

group by name,number

接下来就可以配合select和聚合函数进行操作了,结果如下图:

3、自联结

不用想什么自联结,自己心里就是两张普通表,就这么简单;

自联结仅仅是个名词,数据库能支持,在语法上没任何区别

举例:原表s,左联结自己(命名为p),采用不同方式联结后,得到的联结表如下,注意,s是主表,p作为副表,只是用于与s匹配;故一对多或者多对一的情况下,p中的每一条,都要与主表s中每一行检索、尽量与主表中每一条匹配。

比如,执行这个句子:

select s.id, s.cate_name, p.cate_name

from tdb_cates s left join tdb_cates p

on s.parent_id=p.id;

select之后,呈现输出的结果:

原始例子来源于网上,但是自己梳理总结完成,好了,祝happy coding!

mysql group by去重_MySQL本周总结——group by去重和自联结理解相关推荐

  1. mysql group by 规则_MySQL 中关于 GROUP BY 的问题

    在准备开发博客系统的前期,观摩了一位大佬的源码:http://pan.baidu.com/s/1eRfrsAm 这是16年的一份博客源码系统,但是在测试部署时发现了一个问题不解!!! 后网上资源解析说 ...

  2. mysql根据姓分组_mysql 分组查询 group by

    创建一个表 表名:xl select * from xl: 分组之后,按照分组的字段,只会显示一个 通过性别sex分组 select * from xl group by sex: 通过prold分组 ...

  3. mysql join 去重_MySQL Update inner join数据库去重,以及根据一张表的值更新另一张表...

    1 问题来源 这几天在项目中遇到一个问题:由于前期设计不合理,导致后期用户录入数据时,基础数据表中有重复多余数据.如下: 出现两个 2G网络测试手机 这样类似的基础数据,直接后果就是用户在使用这个基础 ...

  4. 一千万条数据去重_Mysql千万级数据快速去重

    问题:card 表的 card_number 字段忘记加唯一约束,造成大量数据重复,需要去重. 1 测试数据准备 创建表1 2 3 4 5 6CREATE TABLE `card` ( `card_i ...

  5. mysql group by 天_MySQL group by语句如何优化

    在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1G ************* ...

  6. mysql group by 集合_MySQL高级查询之与Group By集合使用介绍

    在MySQL中,你可以获取表达式组合的连接值. 可以使用DISTINCT删去重复值.假若你希望多结果值进行排序,则应该使用 ORDER BY子句. GROUP_CONCAT mysql> SEL ...

  7. mysql group by 范围_MySQL 按照范围/等级 进行Group By

    我们要做一张报表表格,从mysql里取出数据,然后按等级分组,如何实现呢? MySQL 示例 SQL: SELECT ftime, sum(cost) as cost, count(advertise ...

  8. mysql group by个数_mysql 统计 group by 之后的 group 的个数

    如果将 count(*) 和 group by 一起使用,count(*) 统计的将会是每个 group 里面的行数,而不是 group 的个数. 如果你想统计 group 的个数,需要将 group ...

  9. 去重是distinct还是group by?

    distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计. 单纯的去重操作使用di ...

最新文章

  1. hostapd移植与使用
  2. Mysql大表的优化
  3. Xilinx IP解析之FIFO Generator v13.2
  4. Ubuntu下面怎么使用root登录
  5. 建筑工程项目管理信息化PM
  6. 美团刚做起网约车,滴滴就送外卖?你们倒真是相爱相杀
  7. 「代码随想录」关于多重背包,你该了解这些!
  8. matlab低通滤波器库函数代码_MATLAB低通滤波器的设计代码
  9. 数据库系统概论--课后习题
  10. 新手初用mybatis
  11. 内网计算机ip地址查询,内网ip地址怎么查看_怎么查看内网ip地址_如何查看电脑的内网IP地址...
  12. 段式液晶程序设计技巧
  13. twitter如何以图搜图_没有完整图时,如何使用图深度学习?你需要了解流形学习2.0版本...
  14. filter过滤器设置URL例外
  15. 问题解决:Get “xxx“: dial tcp: lookup xxx on xxx: read udp xxx:xxx: i/o timeout
  16. ROS Couldn‘t find executable named xxx.py问题
  17. 大数据在政府中的应用案例
  18. CSS——伪类选择器
  19. 工作流审批平台-系统概述-关联企业应用系统
  20. 网吧带宽控制技术发展之三步曲

热门文章

  1. V5-6R2019.DOC_DELMIA/CATIA_P3的帮助文件
  2. 吴恩达ex3_Andrew Ng在Coursera上课程ex3的一点小心得
  3. 资源获取:自定义SuperSet CSS模板
  4. 什么是网络SDH技术?155M SDH传输分析仪如何选择?
  5. ONNX 模型的静态量化和动态量化
  6. 【并发】线程同步——锁Lock与synchronized比较
  7. 高德地图「海量点标记 + 海量标注」卡顿问题 解决方案
  8. 小米正式宣布:这种手机以后买不到了…
  9. JAVA SE 学习笔记
  10. win 10 mstsc连接 RemoteApp