加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何为MySQL中的唯一值生成唯一编号?

发布时间:2021-08-28 03:46:17 所属栏目:大数据 来源: https://www.jb51.cc
导读:我陷入了为唯一值创建唯一数字的困境.我在MySQL表中有25行我想在其上分配排名.假设10个用户获得相同的值:我想为它们分配相同的数字,其余的将是唯一的.我有以下MySQL查询: (SELECT std_login_id AS ID, STD_NAME, TOTAL_MARKS, (@rnk := @rnk + 1) AS RANK

我陷入了为唯一值创建唯一数字的困境.我在MySQL表中有25行我想在其上分配排名.假设10个用户获得相同的值:我想为它们分配相同的数字,其余的将是唯一的.我有以下MySQL查询:

(SELECT std_login_id AS ID, STD_NAME, TOTAL_MARKS, (@rnk := @rnk + 1) AS RANK FROM 
(SELECT ob.std_login_id, SUM(ob.marks_obtain) AS TOTAL_MARKS, std.student_name AS STD_NAME
    FROM exam_marks_obt ob
    JOIN ac_std_preadmission STD ON ob.std_login_id = std.std_login_id
    JOIN adm_class AS cl ON cl.class_id = std.class_id
    JOIN adm_section se ON se.section_id=std.section_id
    WHERE cl.class_id = 1 AND se.section_id = 1
    GROUP BY ob.std_login_id
    ORDER BY ABS(SUM(ob.marks_obtain)) DESC)
ob CROSS JOIN (SELECT @rnk := 0) AS flyRank )
;

以下是结果:

ID | STD_NAME | TOTAL_MARKS | RANK
1  | name1    | 250         | 1
2  | name2    | 250         | 2
3  | name3    | 200         | 3
4  | name4    | 200         | 4
5  | name5    | 150         | 5
6  | name6    | 150         | 6

我想为250 => 1,200 => 2和150 => 3生成Rank这样的Rank.请告诉我在代码中我可以做些什么来产生这个等级?

解决方法:

我创建了一个测试表来模拟聚合标记的内部选择.然后,允许按列顺序切换,我尝试简单地使用您的方法,因为您已经在查询中使用变量.

SELECT std_login_id AS ID, STD_NAME,
       (@rnk := IF(@track = TOTAL_MARKS , @rnk, @rnk + 1)) AS RANK,
       (@track:= TOTAL_MARKS) as TOTAL_MARKS
  FROM ( select *
           from testtable
       ORDER BY total_marks DESC) ob
CROSS JOIN (SELECT @rnk := 0, @track := 0) AS starter;

我相信这会产生你想要的东西.可能有更好的方法,但现在已经很晚了,所以我会选择它.

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读