mysql实现分组排序
第一步:创建表
DROP TABLE IF EXISTS `bpo_employee_data`;
CREATE TABLE `bpo_employee_data` (
`id` varchar(50) NOT NULL COMMENT '主键',
`batch` varchar(10) NULL COMMENT '月份',
`occur_time` date NULL COMMENT '日期',
`project_id` varchar(50) NULL COMMENT '队列',
`employee_no` varchar(20) NULL COMMENT '工号',
`subject_id` varchar(50) NULL COMMENT '科目id',
`double_value` float NULL COMMENT '实际值',
`target_value_imp` float NULL COMMENT '导入目标值',
`target_value_cal` float NULL COMMENT '计算目标值',
PRIMARY KEY (`id`)
) COMMENT = '用户科目数据表';
第二步:插入表数据如图:
第三步:需求,列出用户(employee_no)在同一个科目下(subject_id)根据double_value值从大到小进行排名
第四步:实现sql
SELECT
employee_no,subject_id,double_value,rank
FROM
(SELECT
tmp.employee_no,
tmp.subject_id,
tmp.double_value,
@rownum := @rownum + 1,
IF( @pdept = tmp.subject_id, @rank := @rank + 1, @rank := 1 ) AS rank,
@pdept := tmp.subject_id
FROM
(
SELECT employee_no,subject_id,double_value
FROM
bpo_employee_data
WHERE
occur_time = '2020-10-07' and project_id = '00000000-0000-0000-0000-000000000003'
AND employee_no IN
(SELECT employee_no FROM bpo_employee_info where group_name IN ( SELECT group_name FROM bpo_employee_info WHERE employee_no = '250' ))
ORDER BY subject_id,double_value DESC ) tmp,(SELECT @rownum := 0,@pdept := NULL,@rank := 0) a
) result
查询结果展示: