沿着MySQL结果重复运行数字

时间:2014-08-31 12:01:38

标签: mysql sql

这似乎应该是相当普遍的事情,所以这可以简单到为我所描述的内容提供正确的词汇。

我想返回查询的结果,在列中我想返回重复的数字序列1,2,3。

期望的结果集:

Num    Result
---------------
1      result1
2      result2
3      result3
1      result4
2      result5

现在我可以使用基本的

返回三个数字的基本列表
SELECT @ROW := @ROW + 1 AS ROW FROM 'use any table with data in it' t join (SELECT @ROW := 0) t2 LIMIT 3

我无法找到一种方法将其与我的查询混合以返回我想要的结果。我提出的最好的回报是重复的1,2,3但是在查询中为每个数字重复每个项目(正如您所期望的那样)。

Num    Result
---------------
1      result1
2      result1
3      result1
1      result2
2      result2

关于如何实现这一目标的任何想法?

编辑:

CREATE TABLE Results (Result varchar(10));
INSERT INTO Results (`Result`) VALUES ('result1');
INSERT INTO Results (`Result`) VALUES ('result2');
INSERT INTO Results (`Result`) VALUES ('result3');
INSERT INTO Results (`Result`) VALUES ('result4');
INSERT INTO Results (`Result`) VALUES ('result5');

CREATE TABLE Randoms (Random varchar(10));
INSERT INTO Randoms (`Random`) VALUES ('whatever1');
INSERT INTO Randoms (`Random`) VALUES ('whatever2');
INSERT INTO Randoms (`Random`) VALUES ('whatever3');

--Initial Query
SELECT Result 

  FROM Results

  ORDER BY Result ASC;


--Closest I've come (not close enough)
SELECT b.Num,
       a.Result 

  FROM Results a,
       (SELECT @ROW := @ROW + 1 AS Num FROM Randoms t join (SELECT @ROW := 0) t2 LIMIT 3) b

  ORDER BY a.Result ASC;

3 个答案:

答案 0 :(得分:2)

我认为你可以这样做......

SELECT MOD(i,3)+1
     , result 
  FROM 
     ( SELECT @i:=@i+1 i
            , result 
         FROM results
            , ( SELECT @i:=2 ) vals 
        ORDER 
           BY result
     ) x;

答案 1 :(得分:1)

虽然您可以使用mod()执行此操作,但我认为if()更简单:

SELECT @row := if(@row < 3, @row + 1, 1) as Num,
       a.Result 
FROM Results a CROSS JOIN
     (SELECT @row := 0) vars
ORDER BY a.Result ASC;

我不确定表randoms的用途。似乎没有必要解决这个问题。 Here是一个SQL小提琴。

答案 2 :(得分:0)

我认为你需要使用这样的MOD函数:

SET @ROW = 0;
SELECT 
  @ROW := @ROW +1 as RowNum,  
  (@ROW + 2) % 3 + 1 as Result 
FROM MyTable

http://sqlfiddle.com/#!2/aa299/7