我在Mysql中有以下表格
Name Age Group
abel 7 A
joe 6 A
Rick 7 A
Diana 5 B
Billy 6 B
Pat 5 B
我想将这些行随机化,但它们仍应按“组”列进行分组。 对于exmaple,我希望我的结果看起来像这样。
Name Age Group
joe 6 A
abel 7 A
Rick 7 A
Billy 6 B
Pat 5 B
Diana 5 B
我应该使用什么查询来获得此结果?整个表应该随机化,然后按“组”列分组。
答案 0 :(得分:1)
您在问题中描述的内容,因为GROUPing更准确地描述为排序。在谈论SQL数据库时,这是一个特殊问题,其中" GROUP"意味着完全不同的东西,并确定聚合操作的范围。
确实" group"是SQL中的保留字,所以尽管mysql和其他一些SQL数据库可以解决这个问题,但它作为属性名称的选择很差。
SELECT *
FROM yourtable
ORDER BY `group`
使用随机值也会产生很多语义混淆。每次检索时,一个真正随机的数字将具有不同的值 - 这将使任何排序都不可能(并且数据库执行排序的批次,这通常对用户是不可见的)。只要实现使用有限时间算法(例如快速排序)不应该成为问题 - 但冒泡排序永远不会完成,并且合并排序可能会变得非常困惑。
还有随机性的度。存在用于生成随机数的不同算法。对于加密来说,关键是随机数分布均匀且完全不可预测 - 通常这些将使用硬件事件(有时甚至是专用硬件),但我不希望你需要它。但是你想要在调用之间重复排序吗?
SELECT *
FROM yourtable
ORDER BY `group`, RAND()
...每次都会给出不同的结果。
OTOH
SELECT
FROM yourtable
ORDER BY `group`, MD5(CONCAT(age, name, `group`))
...会使结果始终以相同的顺序排序。而
SELECT
FROM yourtable
ORDER BY `group`, MD5(CONCAT(DATE(), age, name, `group`))
...将在不同的日子给出不同的结果。
答案 1 :(得分:0)
先做随机,然后按列组排序。
<div class="geopoint-infowindow">
<a [routerLink]="/users/${user.id}">${user.firstName} ${user.lastName}</a>
</div>
答案 2 :(得分:0)
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 |
+-------+-----+----------+
答案 3 :(得分:0)
试试这个:
SELECT * FROM table order by Group,rand()