【问题标题】:Elegant way to create a circular permutation with MySQL使用 MySQL 创建循环排列的优雅方式
【发布时间】:2012-04-18 12:49:16
【问题描述】:

我得到了一组这样的结果:

| id |
| 1  |
| 2  |
| 3  |
| 4  |

我正在努力

| id |
| 4  |
| 1  |
| 2  |
| 3  |

有没有什么优雅的方法可以使用 SQL 脚本来实现这一点?

【问题讨论】:

  • 您能否提供其他示例来说明您希望如何排序结果,或者更好地描述它?仅从这个示例中,您还不清楚您要做什么
  • 您是否建议在其他迭代中使用 3,4,1,2?
  • 我只是想创建一个循环/循环排列,其偏移量为给定表中的 1 行。
  • @Randy 是的,脚本的另一个迭代将给出 3、4、1、2。更好的是,置换的偏移参数可以指定为脚本中的输入。
  • 无需编写 sql - 是的,您应该能够为目标数字之上和之下的所有数字创建另一个逻辑列(布尔值),然后首先对该列进行排序,然后是您的 id 以获得这个订购。

标签: mysql sql permutation


【解决方案1】:

您可以使用 mod 运算符,%ORDER BY

DECLARE @maxId AS INT
SELECT @maxId = MAX(Id) FROM MyTable

SELECT id FROM MyTable
ORDER BY Id % @maxId 

你可以通过添加到Id来获得进一步的旋转,即

ORDER BY (Id + 1) % @maxId

得到你

3
4
1
2

Working SQL Fiddle(我刚刚发现它存在) http://sqlfiddle.com/#!3/a7f15/5

【讨论】:

  • 太棒了!像魅力一样工作+您可以指定偏移参数!我不能要求更多
【解决方案2】:

好的,我会尝试一下 SQL。

select case when id > 3 then 0
       else 1
       end
, id
from mytable
order by 1,2

【讨论】:

  • 感谢您的帮助和投入时间。 @Bort 解决方案似乎更优雅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 2019-09-02
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多