数据表如上图,请问在ACCESS中,如何用SQL 查询出每个部门业绩前15%的员工,谢谢!
SELECT TOP 15 PERCENT * FROM ACCESS GROUP BY 部门 ORDER BY 业绩 DESC
select top (5) * from <表名> order by ’业绩‘ desc;
select top round((select count(员工) from table )*0.15) * from table group by 部门 order by 业绩 desc
查询语句如下,思路就是先用PARTITION BY按照部门分割成几个Partition,每个Partiion按照业绩降序排序。然后再用percent_rank()函数计算每个记录在其所在Partition的排行百分比。最后查询排行百分比少于等于15%的记录。
WITH SlicedData AS (
SELECT 员工, 部门, 业绩,
percent_rank() OVER(PARTITION BY 部门 ORDER BY 业绩 DESC) AS 'percent_rank'
FROM t
)
SELECT 员工, 部门, 业绩
FROM SlicedData
WHERE percent_rank <= 0.15
SQLite测试数据
CREATE TABLE t ('员工', '部门', '业绩');
INSERT INTO t VALUES
('员工1', '部门1', 8888),
('员工2', '部门1', 9999),
('员工3', '部门1', 11111),
('员工4', '部门1', 7777),
('员工5', '部门1', 6555),
('员工6', '部门2', 6633),
('员工7', '部门2', 5785),
('员工8', '部门2', 6999),
('员工9', '部门2', 7167),
('员工10', '部门2', 4890),
('员工11', '部门2', 6553),
('员工12', '部门3', 5896),
('员工13', '部门3', 6644),
('员工14', '部门3', 11111),
('员工15', '部门3', 8888),
('员工16', '部门3', 9999);
select top 15 percent *
from 员工表
group by 部门
order by 薪资 desc
SELECT TOP 15 PERCENT * FROM 员工表 GROUP BY 部门 ORDER BY 业绩 DESC
select 员工 from
(select *,PERCENT_RANK() over(partition by 部门 order by 业绩 desc) per from student )a
where per<=0.15
```
SELECT TOP 15 PERCENT * FROM 表名 GROUP BY 部门 ORDER BY 业绩 DESC
SELECT 员工, 部门, 业绩
FROM 表
WHERE 业绩 IN (
SELECT TOP 15 业绩
FROM 表 as S
WHERE S.员工 = 表.员工 and S.部门 = 表.部门
ORDER BY 业绩 DESC
);
或者:
SELECT * FROM (SELECT * from 表1 order by 部门 asc,业绩 desc) as a WHERE 15<=(select count(*) from 表1 where a.部门=部门 and a.业绩<=业绩) ;
SELECT TOP 15 PERCENT * FROM 表名 GROUP BY 部门 ORDER BY 业绩 DESC