这似乎应该是相当普遍的事情,所以这可以简单到为我所描述的内容提供正确的词汇。
我想返回查询的结果,在列中我想返回重复的数字序列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;
答案 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