MySQL 按列排序,值的平均分布

MySQL order by column, equal spread of values

我正在寻找 select 来自 table 的数据子集,但想确保我从列中获得不同 'types' 的等量组合。

例如,如果 table 有一个名为 'animal' 的列,其中填充了以下内容:

name, animal
'Bob', 'cat'
'Fred','cat'
'Jim','dog'
'Sam','dog'
'Andy','snake'
'Paul','snake'

我想 select 动物类型均匀混合的行,因此结果将是:

['Bob','cat'],
['Jim','dog'],
['Andy','snake'],
['Fred','cat'],
['Sam','dog'],
['Paul','snake']

类似于随机化,但确保所有类型都被平等地包括在内。在 mysql 中有没有办法做到这一点?

这为 table 中的每个名称提供了一个索引,参考了他们拥有的动物,然后依次选择每个索引动物:

SELECT name, animal
  FROM (
    SELECT CASE 
             WHEN @animal = animal THEN @row := @row + 1
             ELSE @row := 0
           END row_num,
           name, 
           @animal := animal animal
      FROM owner
      JOIN (SELECT @animal := null, @row := 0) init
  ORDER BY animal, name
        ) temp
 ORDER BY row_num, animal

See Fiddle

请注意,任何备用动物都将附加到末尾。这是您想要的吗?