SQL语句怎么写先按时间排序,再按姓名排序

SQL语句怎么写先按时间排序,再按姓名排序,第1张

select client,ID,taskdate from 表名 order BY client asc,taskdate,ID desc(如果让client为降序的话order by改成group by,asc改成desc,ID要升序desc改成asc)

字段依次写在order by 后面即可 , 中间用逗号隔开

select from 表 order by time , name

select from 表 order by time asc , name asc

select from 表 order by time desc , name desc

select from 表 order by time asc , name desc

select from 表 order by time desc , name asc

(注:  asc 表示升序 , desc表示降序 , 未明确写明排序方式时默认是升序  )

与之类似的语法是 group by , 按多个字段分组时 , 也是依次将多个字段写在group by 的后面 , 并用逗号隔开 , 范例如下:

select time , name , sum() from 表 group by time , name

扩展资料

可以把 SQL 分为两个部分:数据 *** 作语言 (DML) 和 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据

UPDATE - 更新数据库表中的数据

DELETE - 从数据库表中删除数据

INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

CREATE TABLE - 创建新表

ALTER TABLE - 变更(改变)数据库表

DROP TABLE - 删除表

CREATE INDEX - 创建索引(搜索键)

DROP INDEX - 删除索引

参考资料 百度百科——SQL语句大全

那要看你的表是怎么构建的

一般这汇总情况我认为

你的id应该是自增的吧

如果是自增

那么

插入一个数据的话

就是id等于4的那个行

你的

desc字段应该就是

用来

排序用的吧

那么

在前台

你可以

做一个input框(每行后边都有个input框)

目的就是为了

排序你的数据

在这种情况下

就不需要改动什么字段了吧

唯一需要改动的字段内容

就是

更新

desc的字段就可以了吧

打个比方

原来是这样的

id

name

desc

1

a

0

2

c

3(改动)

3

b

2(改动)

4

d

1(追加在a后)

修改后

name

a

b

c

d

这么排列

id

name

desc

1

a

0

3

b

1

2

c

2

4

d

3

这是在前台显示的内容

在数据库里

你可以看到实际上

改变的

只有

desc

后边的

0

1

2

3

这几个

而数据库的表中

实际数据的位置是不会发生变化

其实你不用担心什么数据量过多的问题

在插入新的数据的时候

就让他的desc值默认是最大的

也就是最后一位显示

先按日期排,有日期相同的,再按name排

如 2015-1-1 abc

2015-1-1 ddd

2015-2-1 abc

asc 是升序,从小到大。

select from

(select top 10 from table order by date asc) order by name

先把分类全取出来,并随机排序,取排在第一个分类。

例如:西装

然后查询的时候 order by (category='西装') desc,category 即可实现要求。

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQL AB创始人之一的Monty Widenius的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。

MySQL的海豚标志的名字叫“sakila”,它是由MySQL AB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者Ambrose Twebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。

MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。

select from table order by a asc,b asc

排序只能是先按a 排序,a字段相同的,再按b排序。不可能a和b都是从a到z顺序排下来的。

排序后应该类似:

abc acd

abc uio

bcd bui

opy acd

如果你希望的是:

abc acd

abc acd

bcd bui

opy acd

这是不可能实现的。因为这样的话,某一行的各个列就会割裂开,不在同一行上,这怎么可能呢?

对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号 返回的第一行分配的是 第二行是 依此类推 这个伪字段可以用于限制查询返回的总行数 而且rownum不能以任何表的名称作为前缀

举例说明

例如表 student(学生)表 表结构为

ID           varchar ( ) 学号

namevarchar ( )  姓名

create table student (ID varchar ( ) name varchar ( ));

insert into student values( 张一 );

insert into student values( 王二 );

insert into student values( 李三 );

insert into student values( 赵四 );

mit;

( ) rownum 对于等于某值的查询条件

如 果希望找到学生表中第一条学生的信息 可以使用rownum= 作为条件 但是想找到学生表中第二条学生的信息 使用rownum= 结果查不到数据 因 为rownum都是从 开始 但是 以上的自然数在rownum做等于判断是时认为都是false条件 所以无法查到rownum = n(n> 的自然数)

SQL> select rownum id name from student where rownum= ;(可以用在限制返回记录条数的地方 保证不出错 如 隐式游标)

SQL> select rownum id name from student where rownum= ;

ROWNUM ID     NAME

张一

SQL> select rownum id name from student where rownum = ;

ROWNUM ID     NAME

( )rownum对于大于某值的查询条件

如果想找到从第二行记录以后的记录 当使用rownum> 是查不出记录的 原因是由于rownum是一个总是从 开始的伪列 Oracle 认为rownum> n(n> 的自然数)这种条件依旧不成立 所以查不到记录

SQL> select rownum id name from student where rownum > ;

ROWNUM ID     NAME

那如何才能找到第二行以后的记录呀 可以使用以下的子查询方法来解决 注意子查询中的rownum必须要有别名 否则还是不会查出记录来 这是因为rownum不是某个表的列 如果不起别名的话 无法知道rownum是子查询的列还是主查询的列

SQL>select from(select rownum no id name from student) where no> ;

NO ID     NAME

李三

赵四

SQL> select from(select rownum id name from student)where rownum> ;

ROWNUM ID     NAME

( )rownum对于小于某值的查询条件

如果想找到第三条记录以前的记录 当使用rownum< 是能得到两条记录的 显然rownum对于rownum<n((n> 的自然数)的条件认为是成立的 所以可以找到记录

SQL> select rownum id name from student where rownum < ;

ROWNUM ID     NAME

张一

王二

综 上几种情况 可能有时候需要查询rownum在某区间的数据 那怎么办呀从上可以看出rownum对小于某值的查询条件是人为true的 rownum对 于大于某值的查询条件直接认为是false的 但是可以间接的让它转为认为是true的 那就必须使用子查询 例如要查询rownum在第二行到第三行之 间的数据 包括第二行和第三行数据 那么我们只能写以下语句 先让它返回小于等于三的记录行 然后在主查询中判断新的rownum的别名列大于等于二的记 录行 但是这样的 *** 作会在大数据集中影响速度

SQL> select from (select rownum no id name from student where rownum<= ) where no >= ;

NO ID     NAME

王二

李三

( )rownum和排序

Oracle中的rownum的是在取数据的时候产生的序号 所以想对指定排序的数据去指定的rowmun行数据就必须注意了

SQL> select rownum id name from student order by name;

ROWNUM ID     NAME

李三

王二

张一

赵四

可以看出 rownum并不是按照name列来生成的序号 系统是按照记录插入时的顺序给记录排的号 rowid也是顺序分配的 为了解决这个问题 必须使用子查询

SQL> select rownum id name from (select from student order by name);

ROWNUM ID     NAME

李三

王二

张一

赵四

这样就成了按name排序 并且用rownum标出正确序号(有小到大)

笔者在工作中有一上百万条记录的表 在jsp页面中需对该表进行分页显示 便考虑用rownum来作 下面是具体方法(每页

显示 条)

select from tabname where rownum< order by name 但却发现oracle却不能按自己的意愿来执行 而是先随便取 条记录 然后再 order by 后经咨询oracle 说rownum确实就这样 想用的话 只能用子查询 来实现先排序 后rownum 方法如下

select from (select from tabname order by name) where rownum< 但这样一来 效率会较低很多

后经笔者试验 只需在order by 的字段上加主键或索引即可让oracle先按 该字段排序 然后再rownum 方法不变

select from tabname where rownum< order by name

取得某列中第N大的行

select column_name from

(select table_name dense_rank() over (order by column desc) rank from table_name)

where rank = &N

假如要返回前 条记录

select from tablename where rownum< ;(或是rownum <= 或是rownum != )

假如要返回第 条记录

select from tablename

where …

and rownum<

minus

select from tablename

where …

and rownum<

order by name

选出结果后用name排序显示结果 (先选再排序)

注意 只能用以上符号(< <= !=)

select from tablename where rownum != ;返回的是前9条记录

不能用 > >= = Beeen and 由于rownum是一个总是从 开始的伪列 Oracle 认为这种条件 不成立 查不到记录

另外 这个方法更快

select from (

select rownum r a from yourtable

where rownum <=

order by name )

where r >

这样取出第 条记录!(先选再排序再选)

要先排序再选则须用select嵌套 内层排序外层选 rownum是随着结果集生成的 一旦生成 就不会变化了 同时 生成的结果是依次递加的 没有 就永远不会有 rownum 是在 查询集合产生的过程中产生的伪列 并且如果where条件中存在 rownum 条件的话 则:

假如 判定条件是常量 则

只能 rownum = <= 大于 的自然数 = 大于 的数是没有结果的 大于一个数也是没有结果的

即 当出现一个 rownum 不满足条件的时候则 查询结束 this is stop key!

: 当判定值不是常量的时候

lishixinzhi/Article/program/Oracle/201311/17923

以上就是关于SQL语句怎么写先按时间排序,再按姓名排序全部的内容,包括:SQL语句怎么写先按时间排序,再按姓名排序、关于mysql数据库排序的问题、SQL先按日期排序,结果再按姓名排,意思是先前排序的结果要打乱重新按姓名排等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9838994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存