MySQL变量包括系统变量和系统变量。这次的学习任务是用户自定义变量。用户变量主要包括局部变量和会话变量。

用户自定义变量的声明方法形如:@var_name,其中变量名称由字母、数字、“.”、“_”和“$”组成。当然,在以字符串或者标识符引用时也可以包含其他字符(例如:@'my-var',@”my-var”,或者@my-var)。

用户自定义变量是会话级别的变量。其变量的作用域仅限于声明其的客户端链接。当这个客户端断开时,其所有的会话变量将会被释放。

用户自定义变量是不区分大小写的。

使用SET语句来声明用户自定义变量:

SET @my_var = 1; SET @my_var := 1; 

以下用一个案例说明:

编写一个 SQL查询 来实现分数排名。如果两个分数相同,则两个分数排名(Rank)应该相同。请注意,平局之后的下一个排名数应该是下一个连续的整数值。换句话说,行列之间不应该有“漏洞”。

+—-+——-+
| Id | Score |
+—-+——-+
| 1 | 3.50 |
| 2 | 3.65 |
| 3 | 4.00 |
| 4 | 3.85 |
| 5 | 4.00 |
| 6 | 3.65 |
+—-+——-+

例如,根据给定的上述 Scores 表,您的查询应该生成以下报告(按最高分排序):

+——-+——+
| Score | Rank |
+——-+——+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 2 |
| 3.65 | 3 |
| 3.65 | 3 |
| 3.50 | 4 |
+——-+——+

查询语句:

select Score, @rank := @rank + (@pre <> (@pre:=Score)) Rank from Scores ,(SELECT @rank := 0,@pre:= -1) INIT ORDER BY Score DESC 

@rank表示成绩排名

@pre表示上一个人的分数

当与上一个分数不一样时@rank = @rank + 1,否则,@rank=rank。

将@rank初始化为1,@pre初始化为-1。

实验结果为:

更多相关文章

  1. MySQL系列多表连接查询92及99语法示例详解教程
  2. 保留用户自定义设置
  3. Android(安卓)- Manifest 文件 详解
  4. Android的Handler机制详解3_Looper.looper()不会卡死主线程
  5. Android(安卓)Studio & ADT 快捷键配置文件所在目录,自定义后可导
  6. Android架构分析之使用自定义硬件抽象层(HAL)模块
  7. android 自定义view
  8. Selector、shape详解(一)
  9. android listview custom style 自定义样式

随机推荐

  1. Android 常用样式设置
  2. Android学习之文件存储
  3. 写在前面
  4. 关于Edittext的一些事情
  5. android EditText 属性
  6. Android设置弹出键盘与View的交互方式[学
  7. Android开发新手学习总结(一)——使用And
  8. 关于华为P10(Android 8.0系统)出现的一个
  9. Android监听键盘弹出收起
  10. Android之collection(集合)