当前位置: 首页 > 面试题库 >

MySQL视图中的行排名

江琦
2023-03-14
问题内容

我需要创建一个自动在结果中添加虚拟行号的视图。这里的图完全是随机的,我要实现的是动态创建的最后一列。

> +--------+------------+-----+
> | id     | variety    | num |
> +--------+------------+-----+
> | 234    | fuji       |   1 |
> | 4356   | gala       |   2 |
> | 343245 | limbertwig |   3 |
> | 224    | bing       |   4 |
> | 4545   | chelan     |   5 |
> | 3455   | navel      |   6 |
> | 4534345| valencia   |   7 |
> | 3451   | bartlett   |   8 |
> | 3452   | bradford   |   9 |
> +--------+------------+-----+

查询:

SELECT id, 
       variety, 
       SOMEFUNCTIONTHATWOULDGENERATETHIS() AS num 
  FROM mytable

问题答案:

采用:

SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

这不是理想的方式,因为将对返回的每一行执行num值查询。更好的主意是创建一个NUMBERS表,其中的一列包含一个从一个开始的数字,然后递增到一个非常大的数字,然后NUMBERS以类似于下面的变量示例的方式联接和引用该表。

MySQL排名,或缺乏

您可以定义一个变量以获得伪行号功能,因为MySQL没有任何排名函数:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • SELECT @rownum := 0定义了变量,并将其设置到零。
  • r是一个子查询/表别名,因为如果不为子查询定义别名,即使不使用别名,也会在MySQL中出错。

在MySQL视图中不能使用变量

如果这样做,将会收到1351错误,因为由于design,您无法在视图中使用变量。该错误/功能的行为记录在这里。



 类似资料:
  • 本文向大家介绍详解Mysql中的视图,包括了详解Mysql中的视图的使用技巧和注意事项,需要的朋友参考一下 视图: mysql中的视图,视图与表有很多相似的地方,视图也是由若干个字段以及若干条记录构成,视图也可以作为select语句的数据源。 视图中保存的仅仅是一条select语句,保存的是视图的定义,并没有保存真正的数据。视图中的源数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚表。

  • 问题内容: 我有一张桌子: 可以通过管理员更改订单,因此可以更改订单列。在管理方面,我有一个带有选择框的表单,用于输入数据库。在插入的列之后,我应该使用哪种查询来对+1进行排序。 我想以使服务器负载最小的方式执行此操作,因为此表当前有1200行。这是保存表顺序的正确方法还是有更好的方法? 任何帮助表示赞赏 编辑: 这是我想要做的,这要归功于itsmatt: 想要将第1行重新排序为第1100行之后,

  • 本文向大家介绍从视图中删除行会从MySQL的基表中删除行吗?,包括了从视图中删除行会从MySQL的基表中删除行吗?的使用技巧和注意事项,需要的朋友参考一下 是的,从视图中删除行从基表中删除行。让我们通过创建一个新表来了解这一点。创建表的查询如下 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出 让我们创建一个视图。创建视图的查询如下

  • 问题内容: 我有一张约有100,000个用户的表。 第一种情况: 当我为上述查询做一个解释计划时,我得到的费用为5200 第二种情况: 当我对第二个查询做一个解释计划时,我得到的费用为100,000。 视图中的where子句如何工作?在视图检索所有行之后是否应用where子句?如何解决此问题? 问题答案: 这是关于已使用的视图算法的。 该 合并 算法行之有效最表的索引和诸如此类的东西-的 不是Te

  • 主要内容:基本语法,删除视图删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下: DROP VIEW <视图名1> [ , <视图名2> …] 其中: 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。 删除视图 【实例】删除 v_students_