Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql->;兰德之后的集团()_Mysql_Random - Fatal编程技术网

Mysql->;兰德之后的集团()

Mysql->;兰德之后的集团(),mysql,random,Mysql,Random,我在Mysql中有下表 Name Age Group 我想随机化这些行,但它们仍应按Group列分组。 对于exmaple,我希望我的结果看起来像这样 Name Age Group 我应该使用什么查询来获得此结果?整个表格应随机分组,然后按“分组”列分组。先进行随机分组,然后按列组排序 select Name, Age, Group from ( select * FROM yourtable order by RAND() ) t order by Gr

我在Mysql中有下表

Name  Age   Group

我想随机化这些行,但它们仍应按Group列分组。 对于exmaple,我希望我的结果看起来像这样

 Name  Age   Group


我应该使用什么查询来获得此结果?整个表格应随机分组,然后按“分组”列分组。

先进行随机分组,然后按列组排序

select Name, Age, Group 
from (
 select *
 FROM yourtable
 order by RAND()
     ) t
order by Group 

您在问题中描述为分组的内容更准确地描述为排序。在谈论SQL数据库时,这是一个特别的问题,其中“组”的含义完全不同,并决定聚合操作的范围

事实上,“group”在SQL中是一个保留字,所以尽管mysql和其他一些SQL数据库可以解决这个问题,但作为属性名,它是一个糟糕的选择

SELECT *
FROM yourtable
ORDER BY `group`
使用随机值也有很多语义混乱。一个真正的随机数在每次被检索时都会有不同的值,这使得任何排序都不可能(而且数据库做了很多排序,这通常是用户看不见的)。只要实现使用一个有限时间算法,比如快速排序,这应该不是问题,但是冒泡排序永远不会完成,合并排序可能会非常混乱

也有一定程度的随机性。生成随机数有不同的算法。对于加密来说,它比随机数均匀分布和完全不可预测更重要-通常这些会使用硬件事件(有时甚至是专用硬件),但我不认为您会需要它。但是您是否希望在调用之间可以重复排序

 SELECT *
 FROM yourtable
 ORDER BY `group`, RAND()
…每次将给出不同的结果

奥托

…将给出始终按相同顺序排序的结果。当

SELECT
FROM yourtable
ORDER BY `group`, MD5(CONCAT(DATE(), age, name, `group`))
…将在不同的日子给出不同的结果。

尝试以下方法:

DROP TABLE my_table;

CREATE TABLE my_table
(name VARCHAR(12) NOT NULL
,age INT NOT NULL
,my_group CHAR(1) NOT NULL
);

INSERT INTO my_table VALUES
('Abel',7,'A'),
('Joe',6,'A'),
('Rick',7,'A'),
('Diana',5,'B'),
('Billy',6,'B'),
('Pat',5,'B');

SELECT * FROM my_table ORDER BY my_group,RAND();
+-------+-----+----------+
| name  | age | my_group |
+-------+-----+----------+
| Joe   |   6 | A        |
| Abel  |   7 | A        |
| Rick  |   7 | A        |
| Pat   |   5 | B        |
| Diana |   5 | B        |
| Billy |   6 | B        |
+-------+-----+----------+
SELECT * FROM table order by Group,rand()

按组排序
?请注意,组是一个保留字,作为列/表标识符是一个糟糕的选择。谁投票支持这种东西?内部排序是冗余的。子查询是冗余的,并且有未加引号的保留字。要求是“除了列组之外,整个表都应该随机”。请你自己也试试。在我发布任何东西之前,先在sqlfiddle中测试和工作。也许我们对“工作”有不同的定义。这就是被接受的答案。谢谢!这对我帮助很大谢谢你!通过
从您的表顺序中选择*,RAND()
SELECT
FROM yourtable
ORDER BY `group`, MD5(CONCAT(DATE(), age, name, `group`))
DROP TABLE my_table;

CREATE TABLE my_table
(name VARCHAR(12) NOT NULL
,age INT NOT NULL
,my_group CHAR(1) NOT NULL
);

INSERT INTO my_table VALUES
('Abel',7,'A'),
('Joe',6,'A'),
('Rick',7,'A'),
('Diana',5,'B'),
('Billy',6,'B'),
('Pat',5,'B');

SELECT * FROM my_table ORDER BY my_group,RAND();
+-------+-----+----------+
| name  | age | my_group |
+-------+-----+----------+
| Joe   |   6 | A        |
| Abel  |   7 | A        |
| Rick  |   7 | A        |
| Pat   |   5 | B        |
| Diana |   5 | B        |
| Billy |   6 | B        |
+-------+-----+----------+
SELECT * FROM table order by Group,rand()