mysql数据库使用sql实现分组排序

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

查询结果展示:

 

猜你喜欢

转载自blog.csdn.net/wangpei930228/article/details/110544552