SQL如何对分组后的结果进行排序并且取前几名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何对分组后的结果进行排序并且取前几名相关的知识,希望对你有一定的参考价值。

代码 企业 商品 百分比率
甲企业 饲料 736.41
乙企业 饲料 475.54
丙企业 饲料 -100
丁企业 饲料 0
总计 000000000 饲料 1165.6
甲企业 合成橡胶 1728.57
乙企业 合成橡胶 -100
丙企业 合成橡胶 321.25
总计 000000000 合成橡胶 351.89
总计 000000000 风机 110.11
甲企业 风机 402.43
乙企业 风机 380.24
结果诸如:1.各分组总计分别排第一,2.组内从大到小排序,3.取企业前2两名。
可能我没有说清楚。我问的不是用SQL-service,是VBF用的数据库。

参考技术A SQL取分组中的前几名

[sql] www.2cto.com
create table #aa(class varchar(10),name varchar(10),lang int,math int)
go

insert into #aa
select '1','a1',60,70
union all
select '1','a2',80,70
union all
select '1','a3',90,70
union all
select '1','a4',50,70
go

insert into #aa
select '2','b1',60,70
union all
select '2','b2',90,90
union all
select '2','b3',90,70
union all
select '2','b4',50,70

go

select * from #aa

--取每年级前一名的成级
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<2
--取每年级前二名的成级
select * from
(select ROW_NUMBER() over(partition by class order by lang+math desc) rr, * from #aa ) a
where rr<3
参考技术B 找了两个方法,参考一下
--方法二:
Select * From @源 A Where Not Exists (Select 1 From @源 Where 组=A.组 And ID <A.ID Having Count(*)> 1)
--方法三:
Select * From @源 A Where (Select Count(*) From @源 Where 组=A.组 And ID <A.ID) <2本回答被提问者采纳

SQL 分组统计并排序

group
by语句必须和聚合函数一起使用.
select
c,max(d)
from
a
group
by
c
order
by
max(d)
desc
这样子可以.
因为一条select语句只可以返回一个结果集...
此句返回按c分组后并按每组中最大的d值进行排序.
参考技术A with
tmp
as
(select
row_number()
over(order
by
count(val))
as
rn,val,count(val)
as
cnum
from
table1
group
by
val)
select
*
from
tmp
where
rn<3
要想区别并列现象还要复杂一些,可能简单的语句解决不了
参考技术B select
top
2
val
from
(select
val,
count(1)
as
num
from
#table1
group
by
val)
as
table2
order
by
num
desc,val

以上是关于SQL如何对分组后的结果进行排序并且取前几名的主要内容,如果未能解决你的问题,请参考以下文章

oracle函数 ROW_NUMBER()

SQL数据分组后取最大值或者取前几个值(依照某一列排序)

SQL如何对分组后运算出来的结果进行排序

linq to sql 怎么查前5条记录

SQL语句如何取前10条,10-30条记录?

Mysql 分组并排序