首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL视图中的行排序

MySQL视图中的行排序
EN

Stack Overflow用户
提问于 2009-12-27 00:54:04
回答 2查看 16.8K关注 0票数 9

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

代码语言:javascript
复制
> +--------+------------+-----+
> | 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 |
> +--------+------------+-----+

查询:

代码语言:javascript
复制
SELECT id, 
       variety, 
       SOMEFUNCTIONTHATWOULDGENERATETHIS() AS num 
  FROM mytable
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-27 01:15:34

使用:

代码语言:javascript
复制
SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

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

MySQL排名,或缺乏排名

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

代码语言:javascript
复制
SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • SELECT @rownum := 0定义变量,并将其设置为零。
  • r是子查询/表别名,因为如果您不为子查询定义别名,即使不使用它,也会在MySQL中出现错误。

不能在MySQL视图中使用变量

如果这样做,您将得到1351错误,因为由于设计原因,无法在视图中使用变量错误/特性行为在这里有文档记录。

票数 17
EN

Stack Overflow用户

发布于 2009-12-27 01:02:49

Oracle有一个rowid伪列。在MySQL中,您可能不得不变得丑陋:

代码语言:javascript
复制
SELECT id,
       variety,
       1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
  FROM tbl

这个查询是在我头上没有测试过的,所以要用一点盐的方法来理解它。此外,它假定您希望按照某种排序标准(在本例中为id)对行进行编号,而不是按照问题中所示的任意编号。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1964811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档