由于大量数据是并发创建的,所以create_time字段值是相同的。这里会有一个很有趣的问题,当order by的字段相同的时候 系统对数据的排序可能变得随机,即一会儿这条数据在前面,一会儿这条数据在后面了 ,所以当翻页的时候我们很容易便看到了重复的数据。
查阅了Goole和相关资料,大概总结了这种情况的原因。其实发生这种现象是“故意”设计的。
如果没有指定ORDER BY语句,则SQL Server(或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的 *** 作符的一个很好的例子。
如果指定ORDER BY语句,SQL Server将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。
确保确定性顺序的唯一方法是在ORDER BY子句中包含保证的唯一列或列组(例如主键)。
order by 用于排序,一般与asc升序或desc降序一起使用.例:select * from 表A order by 列a
group by 用于分类汇总,一般与聚合函数(比如avg平均、sum合计、max最大、min最小、count计算行)一起使用。
例:select 月份,sum(工资)as 总工资 from 工资表 group by 月份
此语句用于统计每个月的日总工资
在使用group by的语句中,只能select用于分类的列(表达式),或聚合函数。
where条件用于group by之前,having用于group by 之后对结果进行筛选。
数据库的排序用order by语句实现。
工具:sqlserver 2008R2
步骤:
1、有如下学生表:
2、现要求按学号正序(由小到大)的顺序进行输出,语句如下:
select * from 学生 order by 学号查询结果:
3、再要求按学号正序(由大到小)的顺序进行输出,语句如下:
select * from 学生 order by 学号 desc结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)