gpt4 book ai didi

mysql - 在 GROUP BY 查询中使用时如何计算 rand()

转载 作者:行者123 更新时间:2023-11-29 04:33:17 25 4
gpt4 key购买 nike

我有一些SQL,我需要在查询中对一些行进行分组,并在分组后为每一行使用一个随机值,这样随机值将在分组后均匀分布到每一行,但我不确定如何mySql 正在处理这个

看这个非常简单的例子:

 CREATE TABLE IF NOT EXISTS soldier (
unit VARCHAR(255) NOT NULL,
name VARCHAR(255) NOT NULL,
personal_number INT
)

select unit, count(name), rand()
from soldier
group by unit

所以我试着从一个单位输入 3 名士兵,从另一个单位输入一名士兵,并且随机列在结果集中的分布似乎非常相似。但我怀疑可能发生的情况是,分组行的值可能总是取自值最小的士兵行,或者取自最大的士兵行,然后分布就会出现偏差。如果 OTOH 它是从任何分组士兵,或平均,或分组后计算,我很好(据我所知)。有谁知道在这种情况下如何计算 rand() ?

最佳答案

我没有这方面的文档引用,但凭经验我能够确定 MySQL 似乎正在评估 rand() after GROUP BY 聚合完成。也就是说,它对每个 计算一次rand(),而不是对表中的每条记录计算一次。我设置了以下测试:

WITH yourTable AS (
SELECT 1 AS id, 3 AS val UNION ALL
SELECT 1, 5 UNION ALL
SELECT 2, 10
)

SELECT id, SUM(val) AS val_sum, rand()
FROM yourTable
GROUP BY id;

Demo

为了验证 ONLY_FULL_GROUP_BY 模式是否已启用,我将查询更改为此,但失败了:

SELECT id, SUM(val) AS val_sum, rand(), val   -- non aggregate column = failure
FROM yourTable
GROUP BY id;

因此,您当前的方法是为每个组选择随机值。请注意,即使它为每条记录选择随机值,然后选择某个最小记录,这些值仍然应该是随机的。

关于mysql - 在 GROUP BY 查询中使用时如何计算 rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com