【问题标题】:Insert random Concate Select Query插入随机连接选择查询
【发布时间】:2021-01-09 21:42:06
【问题描述】:

我正在尝试获取随机行,9 列中只有 4 列,连接不同的行,然后将它们插入到表中

例如:

test    1   9
test2   2   5 
test3   3   6

我想从 3 行中随机选择 2 行 将 test2 和 test3 连接到 test2, test3 并插入 "test2, test3" 2+3(5) 5+6(11) 分成 3 个不同的列。

这完全有可能吗?在什么范围内? 最好的问候

【问题讨论】:

    标签: mysql sql string sum sql-insert


    【解决方案1】:

    如果我没听错的话,你可以在子查询中随机选择两行,然后在外部查询中聚合。

    假设你的表的列是tidval_1val_2

    select group_concat(tid) col_1, sum(val_1) val1, sum(val_2) val_2 
    from (select * from mytable order by rand() limit 2) t
    

    您可以轻松地将其转换为 insert 声明:

    insert into mytable (tid, val_1, val_2)
    select ... -- the above query
    

    【讨论】:

    • 这太疯狂了!我担心我的问题可能会让我太困惑而无法理解,但你做到了!据我所知,它的工作原理!可悲的是,我不完全理解发生了什么,但我希望能在某个时候了解这一点(例如,为什么最后会有一个随机的“t”)再次感谢,你太棒了!
    • @Leno22ß6,因为您需要随机行,这就是您看到 rand() 函数的原因。所以内部子查询随机排序行,然后将结果限制为2rand() 函数 stackoverflow.com/questions/2663710/… 的一个很好的 SO 链接......第二点,您在 select 语句中创建的每个子查询都应该分配一个特定的别名,这就是为什么您在末尾看到 t 的原因。
    • 非常感谢,我之前确实看过 rand() 的顺序,我现在最大的困惑之一是,为什么总和的 ID 写了两次,一次在 () 中,一次在外面,是否只是“AS [名称]”但没有 AS?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2018-10-07
    • 1970-01-01
    • 2016-05-21
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多