mysql - 多次使用 ANY_VALUE 时的 MySQL 行为
问题描述
GROUP BY
在 MySQL 5.7 中使用时,我想为每个组获取一个随机行。从我的研究来看,最干净的方法是做这样的事情:
SELECT ANY_VALUE(column_1), ANY_VALUE(column_2), ..., ANY_VALUE(column_n)
FROM table
GROUP BY column
由于没有类似的语法,ANY_VALUE(*)
或者ANY_VALUE(column_1, column2, ..., column_n)
如果使用上述查询,每个值都可以来自不同的行,或者所有ANY_VALUE
字段都来自同一行,我会感到困惑。
解决方案
如果您想要一个随机行,请使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by column order by rand()) as seqnum
from t
) t
where seqnum = 1;
我猜这也比 快group by
,但您可以检查是否是这种情况。
在 MySQL 5.7 中,您可以使用变量:
select t.*
from (select t.*,
(@rn := if(@c = column, @rn + 1,
if(@c := column, 1, 1)
)
) as rn
from (select t.* from t order by column, rand) t cross join
(select @c := '', @rn := 0) params
) t
where rn = 1;
推荐阅读
- c# - Swashbuckle SwaggerResponseRemoveDefaults 属性仍然向 Swagger 添加 200 Success 响应
- javascript - 有没有办法改变url进入scrollIntoView函数?
- c# - Unity + ARKit / 使物体在图像跟踪后保持原位
- tensorflow - 如何在 tensorflow 2.0 中计算粗麻布?
- r - 将输出 R 与 Mancova 中的 spss 进行比较
- authentication - 在没有用户 Db 的情况下使用 MVC [Authorize] 属性
- javascript - 变量仅在声明为本地时定义
- jquery - 使用 jQuery 将文本/图像复制到剪贴板
- java - java.lang.ClassNotFoundException:找不到 com.howtodoinjava.demo.mapper.MapperDTO 的实现
- javascript - 获取数组的连续元素之间的差异(如 R diff() 函数)?