目标:查询得到每组的max(或者min等其他聚合函数)值,并且得到这个行的其他字段

反模式:引用非分组列

  单值规则:跟在Select之后的选择列表中的每一列,对于每个分组来说都必须返回且仅返回一直值。

select ProductId,Max(DateReported) as Latest

from Bugs  as b

Join BugProducts  as bp

on b.BugId = bp.BugId

Group by ProductId;

  在Group By字句中出现的列能够保证他们在每一组都只有一个值,无论这个组匹配多少行;

Max()等表达式也能保证每组都返回单一的值,即传回参数中的最大值。

如何识别反模式:当输入一个违背了单值规则的查询时,会立刻返回给你一个错误。数据库会返回不同的错误信息。

  在SQLite和MySQL中,有歧义的列可能包含不可预测的和不可靠的数据。

合理使用反模式

  没有歧义的关系叫做“功能依赖”,最常见的就是表的主键和对应的值。

解决方案:使用无歧义的列

  1、只查询功能依赖的列:将有歧义的列排除在查询之外。

  2、使用关联子查询:关联子查询会引用外连接查询,并且根据外联结果查询中的每一条记录最终返回不同的结果。

关联子查询的性能不是最好的,因为外联结查询结果中的每一条记录都会执行一遍关联的子查询。

  3、使用衍生表:使用衍生表来执行子查询,先得到一个临时的结果,然后用这个临时表和原表进行连接查询。

性能相比子查询更好一些。但是数据库必须将临时表得到的记录存在一张临时表中,因此这个方案也不是最好的。

  4、使用Join:创建一个联结查询区匹配哪些可能不存在的记录。这样的查询结果被称为外连接查询。

           该方案使用与针对大量数据查询并且可伸缩性比较关键时。能更好的适应数据量的变化,但是难以理解与维护。

  5、对额外的列使用聚合函数。

  6、链接同组所有值:MySQL与SQLite提供了一个叫做Group_Contract()函数,能将这一组中的所有的值连在一起作为单一值返回,

多个值之间用逗号分隔。其他数据库不支持该函数。

结论:遵循单值规则,避免获得模棱两可的查询结果。

SQL反模式,系列学习汇总

1SQL反模式学习笔记1 开篇

2、SQL反模式学习笔记2 乱穿马路

3、SQL反模式学习笔记3 单纯的树

4、SQL反模式学习笔记4 建立主键规范【需要ID】

5、SQL反模式学习笔记5 外键约束【不用钥匙的入口】

6、SQL反模式学习笔记6 支持可变属性【实体-属性-值】

7、SQL反模式学习笔记7 多态关联

8、SQL反模式学习笔记8 多列属性

9、SQL反模式学习笔记9 元数据分裂

10、SQL反模式学习笔记10 取整错误

11、SQL反模式学习笔记11 限定列的有效值

12、SQL反模式学习笔记12 存储图片或其他多媒体大文件

13、SQL反模式学习笔记13 使用索引

14、SQL反模式学习笔记14 关于Null值的使用

15、SQL反模式学习笔记15 分组

16、SQL反模式学习笔记16 使用随机数排序

17、SQL反模式学习笔记17 全文搜索

18、SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

19、SQL反模式学习笔记19 使用*号,隐式的列

20、SQL反模式学习笔记20 明文密码

21、SQL反模式学习笔记21 SQL注入

22、SQL反模式学习笔记22 伪键洁癖,整理数据

转载于:https://www.cnblogs.com/SavionZhang/p/4024638.html

SQL反模式学习笔记15 分组相关推荐

  1. SQL数据库教程-学习笔记2

    SQL数据库教程-学习笔记2 文章目录 SQL数据库教程-学习笔记2 三.DML语言的学习 1.插入语句:insert into 2.修改语句:update 3.删除语句:delete 4.练习题 四 ...

  2. Windows保护模式学习笔记(九)—— 2-9-9-12分页

    Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...

  3. Windows保护模式学习笔记(五)—— 任务段任务门

    Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...

  4. Windows保护模式学习笔记(四)—— 中断门陷阱门

    Windows保护模式学习笔记(四)-- 中断门&陷阱门 要点回顾 中断描述符表(IDT) 一.中断门 实验:构造一个中断门 第一步:初步构造参数 第二步:确定 Offset in Segme ...

  5. Windows保护模式学习笔记(三)—— 长调用/短调用/调用门

    Windows保护模式学习笔记(三)-- 长调用/短调用/调用门 要点回顾 长调用与短调用 一.短调用 二.长调用(跨段不提权) 三.长调用(跨段并提权) 长调用执行时: 执行返回(RETF)时: 总 ...

  6. js正则贪婪模式_JavaScript正则表达式迷你书之贪婪模式-学习笔记

    这篇文章主要介绍了JavaScript正则表达式迷你书之贪婪模式-学习笔记,需要的朋友可以参考下 贪婪模式: 在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如: ...

  7. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  8. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  9. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

  10. Windows保护模式学习笔记(十三)—— PWTPCD

    Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...

最新文章

  1. Selenium3.X 与 Javascript (Nodejs)
  2. Okhttp同步请求源码分析
  3. java填充二维数组_Java用Arrays.fill()初始化二维数组的实现
  4. 遇到这个工具前我都是建议文章写好就先投Cell?
  5. 消除数据孤岛,华为云DRS让一汽红旗ERP系统数据活起来
  6. ftp一句話download
  7. Struts2 验证码图片实例
  8. PHPWind历史版本及升级包下载(v1.0.0 - v9.0.2、Ofstar to PW)
  9. 第三代移动通信系统抗干扰关键技术(转)
  10. 软件工程课程设计药品信息管理系统*
  11. python中的反三角函数_用公式计算反三角函数
  12. 电脑蓝屏怎么办 七大原因及解决办法来帮你
  13. arm服务器的芯片编年史,64位ARM新篇章 历数史上经典64位处理器
  14. kylin安装以及遇见到的一些问题和解决方法
  15. 眼见为实(2):介绍Windows的窗口、消息、子类化和超类化
  16. 【旅行青蛙】你的蛙到底在干什么?
  17. kicad最小布线宽度默认是多少_CABLExpress发布了最新的光纤布线最佳实践指南
  18. 解决:无法打开文件“GCBase_MD_VC120_v3_0_Basler_pylon_v5_0.lib”
  19. 关于西门子300 中AR2的使用
  20. 【富文本编辑器功能】vue实现富文本编辑器Tinymce功能,保留编辑器格式文章展示在页面上【前后端代码展示,简单好用】

热门文章

  1. scala trait 另一种用法类混入
  2. 回顾云计算项目的得与失
  3. linux下开通ssh
  4. Dalvik和Java运行环境的区别
  5. Linux中解压解压rar文件
  6. mysql 账户余额表_账户表/余额表/消费储蓄表
  7. 图片在mysql中的储存_如何在MySQL中直接储存图片
  8. c编程连接mysql
  9. “网友”叫你先上STM32,51是小朋友玩的,所以你就不学51了
  10. 【渝粤教育】国家开放大学2018年秋季 3722-22T燃气输配工程 参考试题