order by 碰到 union

问题描述

[size=xx-large]一个学生表stu,有中学生和小学生,记录考试成绩,现在要查出成绩最高的10名中学生和10名小学生,怎么写sql?select top(10) * from stu where type=中 order by score descunionselect top(10) * from stu where type=小 order by score desc这样会报错, 那恰当的写法是怎样的呢?sql server环境下.[/size]

解决方案

http://www.codesky.net/article/201007/145530.htmlselect * from ( select top(10) * from stu where type=中 order by score desc ) t1union allselect * from ( select top(10) * from stu where type=小 order by score desc ) t2union all--代替union (因为union会排序 但此处没必要 )你这个逻辑有问题 假设前10名的成绩为100100100999999989898979797 (这个也算吧) 可以这样select * from stu where type=中 and score in ( select top 10 score from stu where type=中 group by score order by score)
解决方案二:
union 要确保2边的列是一样多,也就 a union b 那么a 要查询3列,b也要查询3列,

时间: 2024-10-29 10:52:55

order by 碰到 union的相关文章

ORACLE中的union order by

select * from ( select a.id,a.oacode,a.custid,a.custname,a.xsz,a.salename,a.communicationtheme,a.communicationproperty,a.communicationtime,a.productmanager,a.creator,a.createdate from technology_flow a where a.oastate='正常结束' union select b.id,b.oacod

为何Order by不能直接在union子句中使用

今天一个群中的兄弟问一个问题,说有一个表,表中有很多数据,其中有个字段type,希望从表中随机取出10条记录,其中有5条type=1另外5条type=0,比如下图这样: 我一想,这还不简单,按照要求,每个取top 5,既然是随机的取,那么就order by newid()就是了三,然后把所有数据union起来就得了.所以我立即给出了答案: select top 5 * from xxx where type=1 order by newid() union select top 5 * from

order by居然不能直接在union子句中使用

今天一个群中的兄弟问一个问题,说有一个表,表中有很多数据,其中有个字段type,希望从表中随机取出10条记录,其中有5条type=1另外5条type=0,比如下图这样: 我一想,这还不简单,按照要求,每个取top 5,既然是随机的取,那么就order by newid()就是了三,然后把所有数据union起来就得了.所以我立即给出了答案: select top 5 * from xxx where type=1 order by newid() union select top 5 * from

union组合结果集时的order问题_MsSql

近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理.但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服. 仔细查看了MS的在线帮助,在有关UNION的描述中找到这样一段说明: 如果使用 UNION 运算符,那么各个 SELECT 语句不能包含它们自己的 ORDER BY 或 COMPUTE

[20140812]union all与order by.txt

[20140812]union all与order by.txt --昨天同事问一个sql的问题,关于union all与order by的问题.做一个简单的记录: SCOTT@test> @ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64

union组合结果集时的order问题

近日,在一个项目中用到union组合两个select结果,调试sql时总是报错,所报错误也只是说在union附近有问题,因为sql中用到了group,我想也许是union不支持吧,由于时间紧,就先在程序中做了合并处理.但程序员对于代码的完美性要求总是不能放弃的,所以,常常会有如鲠在喉的感觉,不搞明白心里会不舒服. 仔细查看了MS的在线帮助,在有关UNION的描述中找到这样一段说明: 如果使用 UNION 运算符,那么各个 SELECT 语句不能包含它们自己的 ORDER BY 或 COMPUTE

Mysql联合查询UNION和UNION ALL的使用介绍_Mysql

一.UNION和UNION ALL的作用和语法 UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行.UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION 语法: 复制代码 代码如下: SELECT column_name FROM table1UNIONSELECT column_name FROM table2 注释:默认地,UNION 操作符选取不同的值.如

MSSQL数据中UNION查询排序实现方法

MSSQL 不允许在UNION查询中使用 ORDER BY 因此,当我们需要这种功能的时候,就需要绕一些弯路. 比如有一张学生表student 和教师表 teacher , 我们要查询所有的教师学生的姓名和年龄,教师排前面,学生排后面,分别按字母顺序,则可能会想写一个这样的Sql语句: (注意,这个语句只是为了说明问题,这并不是一个正确的语句)  代码如下 复制代码 SELECT Name,Age FROM Teacher ORDER BY Name UNION SELECT Name,Age

sql union sql union all用法 union union all效率

sql union  sql union all用法与实例教程以及,sql union union all效率 UNION 操作符用于合并两个或多个 SELECT 语句的结果集 UNION 组合多个表(或结果集)并将其作为单个结果集返回; UNION ALL 在结果中包含所有的行,包括重复行. 也就是说,使用UNION组合两个表时,将重复的记录删除:而使用UNION ALL组合两多个表时,不考虑结果集中是否存在重复记录,包括重复行. SQL UNION ALL 语法 SELECT column_