【发布时间】: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
所以这些字母会一起显示,但每次我查询时都会以随机顺序显示。我怎样才能做到这一点?
【问题讨论】:
假设我有一个表,其中一列是:
Letter
A
B
B
C
A
A
C
我正在尝试进行查询,该查询将返回这些字母 in order 但在 random order 中,首先是所有 C,然后是所有 A,等示例:
Letter
C
C
A
A
A
B
B
所以这些字母会一起显示,但每次我查询时都会以随机顺序显示。我怎样才能做到这一点?
【问题讨论】:
这是一种方法:
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));
这是规范的,因此连续运行两次会返回相同的结果。
【讨论】:
试试这个:
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
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
【讨论】: