工具:sqlserver 2008R2
步骤:
1、有如下学生表:
2、现要求按学号正序(由小到大)的顺序进行输出,语句如下:
select from 学生 order by 学号查询结果:
3、再要求按学号正序(由大到小)的顺序进行输出,语句如下:
select from 学生 order by 学号 desc结果:
select
分组列1,分组列2,
聚合列1,聚合列2
from
表
group
by
分组列1,分组列2
order
by
分组列或聚合列
--------
分组查询中,做为查询结果显示的列,必须是用于分组的列,或者聚合的列
比如:sum(),count(),avg()等等
有个偷懒的方法
假设每个分割的数字不超过4位数
写个函数在通过分割获得数字,然后将所有的数字均补齐为4位,前面加'0'
再排序就正常了
------------------------------------
是我做的一个测试表的结果,第一个字段是测试数据
涉及的函数如下:
CREATE OR REPLACE FUNCTION GETNUM(str IN VARCHAR2)
RETURN NUMBER
IS
num NUMBER :=0;
p NUMBER;
i NUMBER :=2;
BEGIN
p := NVL(length(regexp_replace(str,'[^]','')),0);
WHILE p>1 and i<=p loop
BEGIN
num := num + TO_NUMBER(substr(str,instr(str,'',1,i-1)+1,instr(str,'',1,i)-instr(str,'',1,i-1)-1))GETBL(i);
i := i+1;
END;
END LOOP;
IF p = 0 THEN
num := TO_NUMBER(str);
ELSE IF p=1 THEN
num := TO_NUMBER(substr(str,1,instr(str,'',1,1)))+TO_NUMBER(substr(str,instr(str,'',1,1)+1));
ELSE
num := num+TO_NUMBER(substr(str,1,instr(str,'',1,1)))+TO_NUMBER(substr(str,instr(str,'',1,p)+1))GETBL(p+1);
END IF;
END IF;
RETURN num;
END;
-------
CREATE OR REPLACE FUNCTION GETBL(p IN NUMBER)
RETURN NUMBER
IS
num NUMBER := 1;
i NUMBER := 1 ;
BEGIN
WHILE i < p LOOP
BEGIN
num := num0001;
i := i+1;
END;
END LOOP;
RETURN num;
END;
SELECT 分类表cname AS 分类名称, Count(商品表cls) AS 商品数量
FROM 分类表 LEFT JOIN 商品表 ON 分类表cname = 商品表cls
GROUP BY 分类表cname
ORDER BY Count(商品表cls) DESC;
用的什么数据库啊?
建议你,
把带首字钱有空格的先替换成没有空格的,感觉你的实际业务也是不带空格的格式,
修改方式为
update
a
set
a1=trimleft(a1);
你可以查询一下你对应数据库trimleft的写法
另外一种方式排序时需要指明排序方式
select
from
a
order
by
trimleft(a1);
但是这部是最优解决方案。因为是基于降低查询效率来实现的,
每行数据
都在查询的过程中产于了trimleft的运算。
以上就是关于数据库排序语句全部的内容,包括:数据库排序语句、我想在数据库中的一个表中查询出全部数据 并且按照一个分组和排序、oracle 数据库查询排序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)