order by子句放在(Sql order by 和 group BY 如何共同运用)
本文目录
- Sql order by 和 group BY 如何共同运用
- SQL语句 里的order by 、group by、having、where 用在哪里
- SQL中的group by语句和order by语句怎么用最好能有个例子
- 是否可以在创建视图时采用ORDER BY子句
- 下面这条SQL语句表名和列名违反相应的规则吗
- 在由union运算符组合起来的select语句中,不能有order by语句,但是,可以对最后的结
- sql server where、group by、order by 执行顺序
Sql order by 和 group BY 如何共同运用
1、如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里。如果出现了 HAVING 子句,那么它消除那些不满足给出条件的组。
2、如果声明了 ORDER BY 子句,那么返回的行是按照指定的顺序排序的。如果没有给出 ORDER BY,那么数据行是按照系统认为可以最快生成的方法给出的。
例如:
select name,count(*) number
from users
group by name
order by 2 desc
查询users表中,相同姓名的人有多少个,按照重名次数最多的人名从多而少排列。
扩展资料:
GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。
group by a,b,c 则a,b,c三个字段是按照先按a字段对数据行进行排序,再按b字段对那些字段a为同一个值的数据行进行排序,再再按c字段对那些字段a为同一个值且字段b为同一个值的数据行进行排序
order by a,b,c 也是如此
故而
表T 有a,b,c三个字段,按a分组再按c排序的方法如下:
select * from T order by a,c//两个字段顺序不能颠倒
或者
select * from T group by a,c//两个字段顺序不能颠倒
SQL语句 里的order by 、group by、having、where 用在哪里
1.order by 是 按字段 进行排序.. 字段后面可跟 desc 降序..asc 升序..默认为升序2.group by 是进行分组 查询3.having 和 where 都属于 条件过滤 区别在于 一般having是和 group by 连用... 目的是 分组后进行的条件查询...而如果在group by 前面有where 则是表示 先条件过滤再 分组 这个在实际中 特殊的查询 会影响到查询结果PS: 这几条关键字 是有先后顺序的. where.....group by....having.....order by 都是可选..但是如果全部写出来 必须是这个顺序...
SQL中的group by语句和order by语句怎么用最好能有个例子
group by是分组的,比如你要查询一个班级的学生,各省分别有多少人。(表结构是学生表,有学号,姓名,所在省,备注等。)
就应该用到group by了,如:
SELECT 所在省,COUNT(*) AS 学生数
FROM 学生
GROUP BY 所在省
Order by是用来排序的。如,你想要把上例中查得的结果按人数从大到小,或从小到大排列,可以加这么一句,
ORDER BY 学生人数 (DESC或ASC);
好了,就这么个用法。
后面括号的关键字,指明了从大到小,还是从小到大,只能写一个,并且不要括号。
是否可以在创建视图时采用ORDER BY子句
这个要看你是什么数据库的。
Oracle 可以 创建视图的时候, 在里面的 sql 加 order by.
例如:
SQL》 create view v_test as select * from test_main order by id;
视图已建立。
但是 同样的语句, SQL Server 就不行了。
例如:
1》 create view v_test as select * from test_main order by id
2》 go
消息 1033,级别 15,状态 1,服务器 TESTPC\SQLEXPRESS,过程 v_test,第 1 行
除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子
查询和公用表表达式中无效。
下面这条SQL语句表名和列名违反相应的规则吗
一楼的意思是对的,不过是没有表达清楚吧
在嵌套查询的子查询里面确实不能含有ORDER BY子句的
ORDER BY子句一定在最外层的最后面
2楼的~你没有看题哦~1楼说的没错的,表达错误~
-------------------9-8 10:18,先对【wyehua】说抱歉,字打上去就知道错了,但是一直在查资料,调试,上班,所以没来得及更新,现在把完整的回答贴上来。
1,单独的条件语句建议不要加括号,要不复杂查询,而且含很多嵌套语句的话,看着会很晕的,你看看我这样写是不是看起来要舒服很多。
2,info.ROWNUM这种写法是错误的,会报“无效的用户.表.列,表.列,或列规格”错误,rownum并不属于info表的列,他只存在于内存中。不同的嵌套中rownum不用加表.rownum标识符,以下查询测试可行select * from tt where ROWNUM 《5 and id in (select a.id from tt a where rownum 《4) order by id;好像相同的rownum列并没有冲突,个人理解为rownum是在每次子查询或者嵌套查询中都会生成的,在读取完后就销毁了,也就是说任何一个时间内存中都只存在一个rownum列。当然我上面的查询不排除是特殊情况。各位可以都测试下。测试出真知哈。查资料得知oracle中明确规定【rownum不能以任何基表的名称作为前缀】,另外理解rownum的话,rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。例如下面两种用可以用rownum的变通方式实现分页:
select * from (select rownum row_num,month,sell
from (select month,sell from sale group by month,sell))
where row_num between 5 and 9;【网友评论】
select dmp.row_num,dmp.REQUIREMENT_ID from (select rownum as row_num, REQUIREMENT_ID from (select REQUIREMENT_ID from requirement order by REQUIREMENT_ID desc)) dmp where row_num between 10 and 20;【网友评论】
3,【ORDER BY子句一定只能放最外层查询的最后,不能放在子查询中,要不会在order by附近报缺少右括号的错误,显然系统把order by默认为最外层了。】这个我很抱歉,描述有误,应该是ORDER BY子句只能放在FROM子查询子句里,或者最外层的最后,形如select score from money t where exists (select min(t2.score) from money t2 where t.cid = t2.score order by score);ORDER BY子句放在条件子查询里面是要出错的,而且是没有意义的=。=
4,你的查询的修改问题。光成你写的这个子查询的写的意思来看的话,SELECT min(info_date) FROM (SELECT info_date FROM tb_info WHERE info_type = info.info_type AND info_state = ’1’ AND info_payfor = ’0’ and ROWNUM《=3 ORDER BY info_date DESC) mindate,你的意思是不是要将查询(SELECT info_date FROM tb_info WHERE info_type = info.info_type AND info_state = ’1’ AND info_payfor = ’0’ and ROWNUM《=3 ORDER BY info_date DESC)按照info_date降序排列,然后取前3条,也就是说取查询里的最大的前三条,然后再SELECT min(info_date) FROM这个查询,那么意思就是查找这个查询里的第三大的info_date是吧。我先只是按你写的查询来理解你想要的效果,这个可以用不含ORDER BY子句实现,转到4.2.但是and ROWNUM《=3 ORDER BY info_date DESC这个条件有别的问题。看下列测试语句就知道了,转4.1.
4.1 and ROWNUM《=3 ORDER BY info_date DESC得不到你想要的结果,查询SELECT min(info_date) FROM (SELECT info_date FROM tb_info WHERE info_type = info.info_type AND info_state = ’1’ AND info_payfor = ’0’ and ROWNUM《=3 ORDER BY info_date DESC) mindate应该改为这样子:
SELECT min(info_date) FROM (SELECT info_date FROM tb_info WHERE info_type = info.info_type AND info_state = ’1’ AND info_payfor = ’0’ ORDER BY info_date DESC) where ROWNUM 《 =3;
4.2 那么你的查询语句应该改为这样子SELECT * FROM (select * from tb_info info WHERE info.info_type = 2 AND info.info_state = ’1’ AND info.info_payfor = ’0’ AND info.info_date 《 (SELECT min(info_date) FROM (SELECT info_date FROM tb_info WHERE info_type = info.info_type AND info_state = ’1’ AND info_payfor = ’0’ ORDER BY info_date DESC) where ROWNUM 《 =3) ORDER BY info.info_date DESC) where ROWNUM 《=3;
补rownum的概念:
其实, 理解rownum的关键是Oracle 如何执行查询语句. 如果先执行笛卡尔集运算,再执行where条件限制,那么rownum就可以实现 rownum》 n(n》=1)的功能. 但oralce是边执行笛卡尔集运算,边应用选择条件,所以rownum》n(n》1=)永远不成立;【网友评论】
但如果就是想要用 rownum 》 10 这种条件的话话就要用嵌套语句,把 rownum 先生成,然后对他进行查询。
select * from (selet rownum as rn,t1.* from a where ...) where rn 》10一般代码中对结果集进行分页就是这么干的。【网友评论】
在由union运算符组合起来的select语句中,不能有order by语句,但是,可以对最后的结
在由UNION运算符组合起来的SELECT语句中,不能有ORDER BY子句。但是,可以把ORDER BY子句放在最后的SELECT语句后面,以便对最后(集合并操作)的结果表排序。 ORDER BY子句可以对任何列名排序。在SQL Server中,由于结果表把第一条SELECT语句中的列名作为结果表中的列名,因此,在上节最后的实例中,ORDER BY子句可以指定SNAME、DNAME和CNO中的任意列对结果排序,但是不能指定TNAME列。 实例20 对不同表的不同字段组成的集合采用UNION运算符 这里按CNO列对结果进行降序排列,代码如下。 SELECT SNAME AS NAME, DNAME, CNO FROM STUDENT WHERE CNO = 1 OR CNO = 10 UNION
SELECT TNAME AS NAME, DNAME, CNO FROM EACHER WHERE CNO = 1 OR CNO = 10
ORDER BY CNO DESC 运行结果如图所示。(表数据请下载) 在ORDER BY子句中,也可以指定位置列序号,对结果表进行排序,这样就不必考虑结果表的列名问题。 对上例结果进行排序,“ORDER BY CNO DESC”语句就可以写成“ORDER BY 3 DESC”,从而得到同样的结果。 说明 使用ORDER BY子句排序UNION运算结果时,应尽量使用指定位置列序号的方式,这样可以避免出错。
sql server where、group by、order by 执行顺序
先where 条件1,再 group by 条件2再 order by 条件3
如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里。 如果出现了 HAVING 子句,那么它消除那些不满足给出条件的组。
如果声明了 ORDER BY 子句,那么返回的行是按照指定的顺序排序的。 如果没有给出 ORDER BY,那么数据行是按照系统认为可以最快生成的方法给出的。
虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
可以在查询之间使用 UNION 运算符,以将查询的结果组合成单个结果集。
也就是说,order by放在最后面。
更多文章:
第二类和第一类的压力容器有哪些?第一类压力容器,第二类压力容器是什么意思
2024年7月10日 15:43
手机怎么安装silverlight(如何将silverlight集成到安卓APP中)
2024年6月12日 08:43
sql server的特点(SQLserver数据库有什么特征)
2024年7月23日 03:42
ideadata(idea出现datasharing怎么回事)
2024年7月22日 12:10
循环队列出队(采用顺序存储如何实现循环队列的初始化、入队、出队操作)
2024年6月30日 08:25
excel表格自动汇总公式(怎么在excel表格里设置自动计算公式)
2024年7月17日 17:36
sql数据库四舍五入(sql查询语句查询结果是数值小数点后自动四舍五入取小数点后4位,可以怎么写)
2024年7月19日 06:11
system权限怎么获得(【批处理】如何获取SYSTEM权限)
2024年5月23日 03:43
python在线编程 汉语 代码(python输入汉字的代码pattern)
2024年6月5日 22:46
excel保留小数点后两位(excel表格中,怎么保留两位小数)
2024年5月12日 09:01