小白求教: mysql 怎么实现排序后新增一列并分区段赋值,比如分数排名前 20%的就是绩效 A,后 10%的就是绩效 C

2019-05-26 09:40:52 +08:00
 ditie

比如数据表 kaohe 的字段有 id,department,date,userid,score。

需求有三个: 1、怎么根据 score 在一个语句里分月度、分部门进行组内排序,以及当月全体排序?

2、怎么能多一列来显示自动分布的绩效?排名前 20%的就是绩效 A,后 10%的就是绩效 C

3、怎么把这个排序和新增后的绩效结果全部插入到一个新表里?

我是 MySQL 数据库,木有 row_number ()函数

7497 次点击
所在节点    MySQL
67 条回复
tairan2006
2019-05-26 10:10:10 +08:00
答案是用 Python
lihongjie0209
2019-05-26 10:33:15 +08:00
不懂 sql 的话直接在代码里实现.
leriou
2019-05-26 10:36:51 +08:00
case when
DefoliationM
2019-05-26 10:45:44 +08:00
很简单 使用游标
ditie
2019-05-26 10:57:48 +08:00
@tairan2006 并不会呀。。。
ditie
2019-05-26 10:58:01 +08:00
@lihongjie0209 代码里更不会了。。。
Cat73
2019-05-26 10:58:12 +08:00
MySQL 有 count,有 limit,麻烦点的思路可以先查记录的 id,然后 where id in ( ... )
ditie
2019-05-26 10:58:54 +08:00
@leriou case when 我会,但怎么表示前 20%这种分布?怎么进行总排序和组内排序?
ditie
2019-05-26 10:59:05 +08:00
@DefoliationM 游标。。。我百度了下都没明白。。。
ditie
2019-05-26 10:59:44 +08:00
@Cat73 想想就头大呀大佬
Huelse
2019-05-26 11:03:08 +08:00
呃,我的理念是,任何多余的 where 条件都不写,全部交给语言去处理
ditie
2019-05-26 11:06:39 +08:00
@Huelse 我已经听不懂了啊大佬
francis59
2019-05-26 11:40:26 +08:00
太复杂的话要么写程序分析,要么复制到 excel 里用公式分析,excel 有不少统计分析的公式
Alexhohom
2019-05-26 11:41:09 +08:00
前 20%可以在代码里实现
thedog
2019-05-26 11:50:38 +08:00
用 rank() over(partition by ....)
您可以搜一下这个东西的用法
thedog
2019-05-26 11:51:07 +08:00
哦,没有 row_number,那当我没说。。。
ditie
2019-05-26 12:24:07 +08:00
@francis59 就是想后台 sql 直接出结果,前端网页就查看
ditie
2019-05-26 12:24:19 +08:00
@thedog 给热心的你点赞
ditie
2019-05-26 12:24:43 +08:00
@Alexhohom 是指什么代码呀,我前端似乎是 nodejs, 数据库就是 mysql 5.7
lolizeppelin
2019-05-26 15:57:24 +08:00
over 是窗口函数 mysql 8.0 mariadb 10.2 以后支持

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX