sql语句 在分组内排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql语句 在分组内排序相关的知识,希望对你有一定的参考价值。

在分组内如何排序然后再提取前两个其余删除,最好写一个例子,我试了很长时间都没有成功,谢谢!!!

只能用存储过程
思路如下
将分组那个字段比如是A
Create temp table tmp_b
foreach
select distinct A into bianlianga from table
insert into tmp_b
select top 2 B from table where A=bianlianga order by B ;
delete from table where A=bianlianga and B in(select * from tmp_b);
end foreach
参考技术A delete t
from table t
where ID not in(select top 2 ID from table where col=t.col order by ID)

--查询保留信息

select *
from table t
where ID in(select top 2 ID from table where col=t.col order by ID)
参考技术B SELECT pub_id, SUM(advance) AS AmountAdvanced,
AVG(price) AS AveragePrice
FROM pubs.dbo.titles
WHERE pub_id > '0800'
AND price >= 5
GROUP BY pub_id
HAVING SUM(advance) > 15000
AND AVG(price) < 20
ORDER BY pub_id DESC
参考技术C mysql:
select age,name from t_employee group by age desc limit 1,2;

MSSQLServer2000:

select top 2 * from T_Employee order by FSalary Desc;

oracle 和DB2 没有直接方法,可通过窗口函数实现!
参考技术D 用GROUP BY 最后取TOP 2就好了

sql语句 按一列分组 然后再按别一列组内排序?

比如,我有个表有
ID unitname voucherID
1 意义 23
2 你怒 12
3 意义 15
4 你怒 16
5 你怒 6
我想先按unitname的内容进行分组,然后再在组内按voucherID排序

sql 按 group 单纯的对unitname 分组查询后 是 "统计数据" ,不存在组内情况,并不会带有 voucherID,不能排序,对 voucherID 的排序也是无意义。

或者说你按 unitname、voucherID 俩个分组,然后 按voucherID 排序,这个是可以实现的。追问

我不是说用group by,只是想先把unitname中相同的内容放在一起,然后再把相同unitname的项的voucherID 进行排序

追答

分组? 排序? 天呐 我看到你采纳的答案了..

参考技术A select ID,unitname,voucherID
from 表
order by unitname,voucherID本回答被提问者采纳

以上是关于sql语句 在分组内排序的主要内容,如果未能解决你的问题,请参考以下文章

sql 分组内排序

sql 分组排序

sql group 后按分组数量的多少排序怎么写?

Mysql 分组并排序

SQL 分组统计并排序

sql语句的基本用法总结