我正在尝试使用我的sql查询返回一个序列号列。我需要将它放在SELECT语句中,因为我想将此查询嵌套在另一个中,然后使用之前生成的列进行进一步的计算。
我到处寻找,但我找不到任何这方面的例子。
以下内容的效果:
SELECT *, ROW_NUMBER() as row_number from my_awesome_table;
这应该产生这样的东西:
row_number some_column some_other_column
---------- ----------- -----------------
1 bla bla bla bla bla
2 bla bla bla bla bla
3 bla bla bla bla bla
4 bla bla bla bla bla
请注意,some_column和some_other_column是my_awesome_table中的实际现有列,而row_number仅为此查询即时生成。
谢谢! 猪
答案 0 :(得分:4)
您需要使用MySQL user variables。我们来一个变量t1
。在0
初始化它。并在每个选择值中增加它。
SET @t1=0;
SELECT @t1 := @t1+1 as row_number, my_awesome_table.* from my_awesome_table
这样就可以了。
答案 1 :(得分:1)
我最喜欢做其他人建议的方法是:
SELECT @rownum := (IFNULL(@rownum, 0) + 1), my_awesome_table.*
FROM my_awesome_table
您应该小心使用SELECT中的用户变量,但 - 作为the docs note,
“在SELECT @ a,@ a:= @ a + 1,...,你 可能会认为MySQL会评估 @a先做一个作业 第二。但是,改变了 声明(例如,通过添加 GROUP BY,HAVING或ORDER BY子句) 可能导致MySQL选择执行 计划与不同的顺序 评价“。
不同版本的MySQL可能会产生不同的结果。相应地进行测试,并考虑在代码中而不是在查询中对行进行编号。
答案 2 :(得分:0)
SELECT @rownum = @rownum + 1 AS row_number, mat.*
FROM my_awesome_table mat,
(SELECT @rownum := 0) r
答案 3 :(得分:-1)
MySQL不这样做。
一篇小小的谷歌搜索发现了这篇文章:
http://explainextended.com/2009/09/14/mysql-emulating-row_number-with-multiple-order-by-conditions/