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
请注意,任何备用动物都将附加到末尾。这是您想要的吗?
我正在寻找 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
请注意,任何备用动物都将附加到末尾。这是您想要的吗?