天天看点

sql分组排序, 分页查询

sql分组排序,分页查询

1.查询每个人,拥有数量最多的两条数据
;WITH tab AS (SELECT row_number() OVER(PARTITION BY name ORDER BY amount desc) AS row,* FROM table)
SELECT * FROM tab WHERE row<=
           

2.查询每门课程不低于80分的学生信息

select  * from table GROUP BY name having  socre >=

//也可以用排除法 把成绩小于的学生排除掉
select name from score where name not in(
    select name from score where score < )
           

3.排序查询第 20-40

;WITH  A  AS (
SELECT 
row_number() OVER(ORDER BY datetime DESC) AS rowIndex ,*
FROM table where delete=) 
 SELECT *  FROM A WHERE A.rowIndex <=  and A.rowIndex >
//这种方法会把表里的数据全部排序后,进行查询,所以要加上where条件,进行部分排序,不然表数据太多的话,性能下降的很快
           

或者

SELECT TOP  * FROM table 
WHERE id NOT IN (
SELECT TOP  id FROM table)
           

或者

SELECT * FROM TABLE  WHERE id IN (
SELECT TOP  id FROM TABLE ORDER BY id) ORDER BY id desc
//这种方法很少用,而且也难处理,性能没前两个好,当初某面试官给我说的一种方法