在回答这个问题之前,我们要首先搞清楚分组的作用。

SQL语句里引入“GROUP BY子句”的作用是根据参与分组的字段将记录分成一个个的小组,然后对各个小组进行汇总,每个小组只输出一条与该组有关的汇总信息。分组通常要配合使用聚合函数才有意义。

因为是输出与分组汇总有关的信息,其“SELECT子句”中的输出字段列表一般由参与分组的字段和对字段使用聚合函数而得到的汇总信息组成,对于输出字段列表中的分组字段必须同时出现于“GROUP BY子句”的分组字段列表里,相反不参与分组的字段则不得出现于输出字段列表中(使用聚合函数获得的汇总信息除外),否则系统会报错,而输出字段列表里的汇总信息则无须也不能加入“GROUP BY子句”的分组字段列表里。

那么带GROUP BY子句的SQL语句我们如何区分分组字段和汇总字段呢?很简单,在输出字段列表里使用聚合函数得到的字段、或者可以得到某个固定值的表达式字段就是汇总字段,其它则为分组字段。聚合函数包括COUNT、SUM、AVG、MAX、MIN、FIRST和LAST等。

下列复合查询例子,使用分组方法查出A表中2012年各个Type最高分数的名字、类型、分数和年份:
select A.name,A.type,A.score,A.year from A,
(select type,max(score) as maxscore from A where year=2012 group by type) t
where A.type=t.type and A.score=t.maxscore and A.year=2012 order by A.type,A.name
请留意上列语句子查询表t里只输出分组字段“tpye” 和汇总字段“max(score) ”,其它没有参与分组的字段没有出现于该子查询SQL语句中,如果参与的话就会出问题。上列语句之所以要采用复合查询主要是为了解决分组时不得引入非分组字段,而同时又要输出非分组字段之间的矛盾。

现在我们来分析一下楼主提问中的SQL语句。该语句输出字段列表包含所有的字段,而分组子句的分组字段列表里只有一个“type”字段,SELECT子句列的分组字段和GROUP BY子句里分组字段未能相互对应,语句报错那是必然的。那么怎么办呢?我们可以更改如下:
select * from A where year=2012 group by id,name,type,score,year.... order by score DESC
现在语句就不会报错了,但是这条语句实际上是没有太多作用的,因为所有字段都参与分组等于没分组,顶多只有排除完全重复记录的作用,而排除无重复记录只要使用DISTINCT关键字即可而且其效率要高出很多。
因为楼主的语句里不含汇总信息,故无需分组。如果仅仅是为了排序,只需引入ORDER BY子句即可。例如:
select * from A where year=2012 order by type,score DESC,name
先按类型排序、类型相同则按分数降序排序、分数相同则按姓名排序

在这里很难准确猜测提问中SQL语句意图达到的目的,如有必要楼主不妨说明一下。

复合查询sql子查询操作相关推荐

  1. php单行子查询,sql 子查询要命名

    概率dp专场 专题链接 第一题--poj3744 Scout YYF I  链接 (简单题) 算是递推题 如果直接推的话 会TLE 会发现 在两个长距离陷阱中间 很长一部分都是重复的 我用 a表示到达 ...

  2. sql子查询示例_学习SQL:SQL查询示例

    sql子查询示例 In the previous article we've practiced SQL, and today, we'll continue with a few more SQL ...

  3. 金仓数据库 KingbaseES SQL 语言参考手册 (10. 查询和子查询)

    10. 查询和子查询 本章描述SQL查询以及子查询.包含以下章节: 关于查询和子查询 创建简单查询 层次查询 集合操作 查询结果排序 JOIN操作 使用子查询 限制嵌套查询层数 DUAL表查询 10. ...

  4. SQL——子查询的概念及使用

    SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询 一. 利用子查询进行过滤 假设订单存储在两个表中.对于包含订单号.客户ID. 订单日期的每个订单,orders表存储一行.各订单的 ...

  5. 第二节 数据CRUD操作与连接查询和子查询(包含练习)

    笔记中的大部分例子都是通过部门和部门员工表中的数据进行的举例,表的相关数据创建放在文末,以便理解笔记中的部分语句. 一.数据CRUD操作 1. 插入数据 1.1 插入一条数据 INSERT INTO ...

  6. sql 子查询及基本语句 挺全的收录

    引自https://blog.csdn.net/jia_gugang/article/details/80282873 一.SQL子查询语句 1.单行子查询         select ename, ...

  7. SQL子查询总结:相关子查询与非相关子查询有什么区别

    如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句(例如select语句.insert语句.update语句或者delete语句)中,那么该select语句成 ...

  8. MySQL 表关系及多表操作(联合查询、连接查询、子查询)

    文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...

  9. sql子查询示例_SQL更新查询示例说明

    sql子查询示例 In this article, we're going to learn how to use the SQL update statement - what it is, wha ...

  10. sql 子查询(mysql)

    子查询:一个查询嵌套在另一个查询当中:又叫内部查询. 子查询 可以分为: 单行单列(就是一个值) 单行多列(就是有一行,这一行有很多不同列数据) 多行单列(同一列不同的数据) 多行多列(可以说就是一张 ...

最新文章

  1. Maven安装和配置及使用方法
  2. PHP算法导出Excel实现字段联动
  3. 机器学习-集成之随机森林算法原理及实战
  4. 二分法(leetcode分类解题,C++代码详细注释)
  5. Javascript document对象常用的方法和属性
  6. Sql server安装时出现找不到vc_red.msi错误
  7. java路由方法_Linux添加路由的方法
  8. .net下调用WebService
  9. 我和阿里的情缘和故事
  10. java写培根披萨和海鲜披萨_java子类继承父类实例-披萨的选择实现代码
  11. CSDN博文下载器(JAVA)
  12. 移动边缘计算网络架构
  13. js 去除空格与换行
  14. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
  15. 【功能实现】qrcode生成二维码Demo
  16. 修改iOS工程的Organization Name
  17. JAVA常用工具类-【5】FFMPEG转换、分割、合并音频
  18. SWUST OJ 67: 学生成绩管理
  19. linux 中的 super 命令
  20. 西电计算机学院有保研清华的吗,2021届清华录取保研学生3520余人,本校学生约一半,西电实力强大...

热门文章

  1. 浏览器的标签栏上网站的小图标的设置方式
  2. dota2连接服务器没有响应,win10系统dota2无法与任何服务器建立连接的解决方法
  3. 计算机无法访问dota服务器,dota2无法与任何服务器建立连接如何解决
  4. 本源量子计算机云平台,本源量子计算云平台
  5. 算法学习:LeetCode-592. 分数加减运算
  6. 2D游戏案例:(平台下落类)Solo Fall
  7. php开发 公众号自动回复,微信公众号开发之文本消息自动回复php代码_php实例 - sha1...
  8. 调用远程摄像头进行人脸识别_工地如何实现安全帽检测/人脸识别?
  9. Python下载及环境的安装
  10. 关于VO、RVO、ORCA的个人理解