【问题标题】:sqlite - How can I order in group but randomly?sqlite - 我如何随机订购?
【发布时间】:2018-09-21 09:54:41
【问题描述】:

假设我有一个表,其中一列是:

Letter  
A
B
B
C
A
A
C

我正在尝试进行查询,该查询将返回这些字母 in order 但在 random order 中,首先是所有 C,然后是所有 A,等示例:

Letter  
C
C
A
A
A
B
B

所以这些字母会一起显示,但每次我查询时都会以随机顺序显示。我怎样才能做到这一点?

【问题讨论】:

    标签: mysql sql sqlite random


    【解决方案1】:

    这是一种方法:

    select t.*
    from t join
         (select letter, rand() as rnd
          from t
          group by letter
         ) tt
         on t.letter = tt.letter
    order by tt.rnd;
    

    一种更简单的方法是对字母本身进行计算。这是一种方法:

    select t.*
    from t
    order by rand(ascii(t.letter));
    

    这是规范的,因此连续运行两次会返回相同的结果。

    【讨论】:

      【解决方案2】:

      试试这个:

      For MySQL:

      SELECT T.Letter 
      FROM Your_Table T
      JOIN (
          SELECT *
              ,RAND()RandumNum
          FROM(
              SELECT DISTINCT Letter FROM Your_Table
              )D
              )E ON E.Letter = T.Letter
      ORDER BY E.RandumNum
      

      查看#1 SQL Fiddle

      For Sqlite:

      CREATE TEMP TABLE tempEmployees AS 
      SELECT Letter,RANDOM()RandumNum 
      FROM Your_Table
      GROUP BY Letter
      ;
      
      SELECT T.Letter
      FROM Your_Table T
      JOIN tempEmployees E ON E.Letter = T.Letter
      ORDER BY E.RandumNum;
      

      检查这个#2 SQL Fiddle

      【讨论】:

      • 效果很好,但可以通过 2 次选择而不是 3 次选择来完成,如 Gordon Linoff 在他的回答中所示
      猜你喜欢
      • 1970-01-01
      • 2019-11-11
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多