MySQL57生成排名的方法

第一种就是用比较常见的@rank:=@rank+1

SELECT 
name as '姓名',
counts as '笔试总分',
@rank:=@rank+1 as '排名'
FROM(
SELECT  
name, 
IFNULL(SUM(score), 0) AS counts
FROM
  users t
where
  data_type = '笔试分数'
GROUP BY name
ORDER BY counts DESC) t,
(SELECT @rank:=0) p
姓名笔试总分排名
JMz4001
JMzz3872

这样就可以自动生成一列排名啦。

如果相同分数排名想要一样的,可以用用高级的@rank

这边的重点不在这,而是表面不用@rank这种方法来作排名

因为有的时候,在一个框架中开发一个可视化的数据库交互应用,前端传入的SQL语句中含有“:”,“,” , “;”等的字符串就报错,这个方法就可以巧妙绕过去

首先在数据库的函数里创建一个排名函数

CREATE DEFINER=`root`@`%` FUNCTION `func_row_num`(reset bit) RETURNS int(11)
begin
  	if reset then
    	set @row_num:= 0;
    else
    	set @row_num:= IFNULL(@row_num, 0) + 1;
    end if;
    return  @row_num;
end

 然后使用这个函数 func_row_num(0)为排序  func_row_num(1为重置),所以我们在查询的时候需要先重置一下排名然后再做排名,防止排名一直叠加上去。

SELECT 
    name as '姓名',
    counts as '笔试分数',
    func_row_num(0) as '排名'
FROM(
SELECT
    name,
    IFNULL(sum(score), 0) AS counts,
    func_row_num(1) AS rank
FROM
    student
WHERE
    data_type = '笔试'
GROUP BY name
ORDER BY counts DESC) t

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建一个名为“students”的表,其中包括id(主键)、姓名、性别、年龄和成绩五个字段。 2. 在“students”表中插入5条数据。 3. 将“students”表中id为1的学生的姓名更新为“张三”。 4. 将“students”表中id为2的学生的成绩更新为90分。 5. 在“students”表中删除id为3的学生的记录。 6. 查询“students”表中所有学生的记录。 7. 查询“students”表中成绩大于等于80分的学生的记录。 8. 查询“students”表中成绩排名前三的学生的记录。 9. 查询“students”表中男性学生的记录。 10. 查询“students”表中女性学生的记录。 11. 查询“students”表中年龄最大的学生的记录。 12. 查询“students”表中年龄最小的学生的记录。 13. 查询“students”表中成绩最高的学生的记录。 14. 查询“students”表中成绩最低的学生的记录。 15. 查询“students”表中成绩在70分到80分之间的学生的记录。 16. 查询“students”表中成绩在60分以下的学生的记录。 17. 查询“students”表中成绩大于等于90分且年龄小于等于20岁的学生的记录。 18. 查询“students”表中成绩大于等于80分且年龄大于25岁的学生的记录。 19. 查询“students”表中成绩在80分到90分之间且年龄在20岁到25岁之间的学生的记录。 20. 查询“students”表中成绩最高的前三名学生的记录。 21. 查询“students”表中成绩最低的前三名学生的记录。 22. 将“students”表中所有学生的成绩增加10分。 23. 将“students”表中男性学生的成绩增加5分。 24. 将“students”表中女性学生的成绩增加8分。 25. 将“students”表中成绩在60分以下的学生的成绩增加15分。 26. 将“students”表中成绩在70分到80分之间的学生的成绩增加7分。 27. 将“students”表中成绩在80分到90分之间且年龄在20岁到25岁之间的学生的成绩增加5分。 28. 将“students”表中成绩排名前三的学生的成绩增加3分。 29. 将“students”表中成绩排名第四到第六名的学生的成绩增加2分。 30. 将“students”表中成绩排名第七到第十名的学生的成绩增加1分。 31. 查询“students”表中所有学生的姓名和成绩。 32. 查询“students”表中成绩排名前三的学生的姓名和成绩。 33. 查询“students”表中成绩在80分到90分之间的学生的姓名和成绩。 34. 查询“students”表中男性学生的姓名和成绩。 35. 查询“students”表中女性学生的姓名和成绩。 36. 查询“students”表中年龄最大的学生的姓名和年龄。 37. 查询“students”表中年龄最小的学生的姓名和年龄。 38. 查询“students”表中成绩最高的学生的姓名和成绩。 39. 查询“students”表中成绩最低的学生的姓名和成绩。 40. 查询“students”表中成绩在70分到80分之间的学生的姓名和成绩。 41. 查询“students”表中成绩在60分以下的学生的姓名和成绩。 42. 查询“students”表中成绩大于等于90分且年龄小于等于20岁的学生的姓名和成绩。 43. 查询“students”表中成绩大于等于80分且年龄大于25岁的学生的姓名和成绩。 44. 查询“students”表中成绩在80分到90分之间且年龄在20岁到25岁之间的学生的姓名和成绩。 45. 查询“students”表中成绩最高的前三名学生的姓名和成绩。 46. 查询“students”表中成绩最低的前三名学生的姓名和成绩。 47. 查询“students”表中男性学生的平均年龄。 48. 查询“students”表中女性学生的平均年龄。 49. 查询“students”表中成绩大于等于80分的学生的平均成绩。 50. 查询“students”表中成绩排名前三的学生的平均成绩。 51. 查询“students”表中成绩在80分到90分之间的学生的平均成绩。 52. 查询“students”表中年龄最大的学生的平均成绩。 53. 查询“students”表中年龄最小的学生的平均成绩。 54. 查询“students”表中成绩最高的学生的平均成绩。 55. 查询“students”表中成绩最低的学生的平均成绩。 56. 查询“students”表中成绩在70分到80分之间的学生的平均成绩。 57. 查询“students”表中成绩在60分以下的学生的平均成绩。 58. 查询“students”表中成绩大于等于90分且年龄小于等于20岁的学生的平均成绩。 59. 查询“students”表中成绩大于等于80分且年龄大于25岁的学生的平均成绩。 60. 查询“students”表中成绩在80分到90分之间且年龄在20岁到25岁之间的学生的平均成绩。 61. 查询“students”表中成绩最高的前三名学生的平均成绩。 62. 查询“students”表中成绩最低的前三名学生的平均成绩。 63. 查询“students”表中男性学生的总人数。 64. 查询“students”表中女性学生的总人数。 65. 查询“students”表中成绩大于等于80分的学生的总人数。 66. 查询“students”表中成绩排名前三的学生的总人数。 67. 查询“students”表中成绩在80分到90分之间的学生的总人数。 68. 查询“students”表中年龄最大的学生的总人数。 69. 查询“students”表中年龄最小的学生的总人数。 70. 查询“students”表中成绩最高的学生的总人数。 71. 查询“students”表中成绩最低的学生的总人数。 72. 查询“students”表中成绩在70分到80分之间的学生的总人数。 73. 查询“students”表中成绩在60分以下的学生的总人数。 74. 查询“students”表中成绩大于等于90分且年龄小于等于20岁的学生的总人数。 75. 查询“students”表中成绩大于等于80分且年龄大于25岁的学生的总人数。 76. 查询“students”表中成绩在80分到90分之间且年龄在20岁到25岁之间的学生的总人数。 77. 查询“students”表中成绩最高的前三名学生的总人数。 78. 查询“students”表中成绩最低的前三名学生的总人数。 79. 将“students”表中的所有记录按照成绩从高到低排序。 80. 将“students”表中的所有记录按照成绩从低到高排序。 81. 将“students”表中的所有记录按照年龄从大到小排序。 82. 将“students”表中的所有记录按照年龄从小到大排序。 83. 将“students”表中的所有记录按照性别和成绩从高到低排序。 84. 将“students”表中的所有记录按照性别和成绩从低到高排序。 85. 将“students”表中的所有记录按照成绩和年龄从高到低排序。 86. 将“students”表中的所有记录按照成绩和年龄从低到高排序。 87. 将“students”表中的所有记录按照性别、年龄和成绩从高到低排序。 88. 将“students”表中的所有记录按照性别、年龄和成绩从低到高排序。 89. 将“students”表中的所有记录按照成绩排名。 90. 将“students”表中的所有记录按照年龄排名。 91. 将“students”表中的所有记录按照性别、年龄和成绩排名。 92. 将“students”表中的所有记录按照性别、年龄和成绩分组统计。 93. 统计“students”表中男性学生和女性学生的平均成绩。 94. 统计“students”表中不同年龄段(如20岁以下、20岁到30岁、30岁以上)的学生人数。 95. 统计“students”表中成绩排名前三的学生的平均成绩。 96. 统计“students”表中成绩在80分到90分之间的学生的平均成绩。 97. 统计“students”表中成绩在70分到80分之间的学生的平均成绩。 98. 统计“students”表中成绩在60分以下的学生的平均成绩。 99. 统计“students”表中成绩大于等于90分且年龄小于等于20岁的学生的平均成绩。 100. 统计“students”表中成绩大于等于80分且年龄大于25岁的学生的平均成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值