gpt4 book ai didi

sql - 随机聚合?

转载 作者:行者123 更新时间:2023-12-04 18:09:41 24 4
gpt4 key购买 nike

我正在使用 Microsoft 的 SQL Server 2008。我需要通过外键进行聚合以随机获得一个值,但我很困惑。考虑下表:

id          fk          val
----------- ----------- ----
1 100 abc
2 101 def
3 102 ghi
4 102 jkl

想要的结果是:
fk          val
----------- ----
100 abc
101 def
102 ghi

fk 102 的 val 将随机为“ghi”或“jkl”。

我尝试使用 NEWID() 来获取唯一的随机值,但是,由于 NEWID() 值因子查询而异,因此 JOIN 失败。
WITH withTable AS (
SELECT id, fk, val, CAST(NEWID() AS CHAR(36)) random
FROM exampleTable
)
SELECT t1.fk, t1.val
FROM withTable t1
JOIN (
SELECT fk, MAX(random) random
FROM withTable
GROUP BY fk
) t2 ON t2.random = t1.random
;

我难住了。任何想法将不胜感激。

最佳答案

我可能会有点不同的想法,使用一个名为 ROW_NUMBER() 的特殊排名函数。 .

您基本上将一个数字应用于每一行,按 fk 分组,从 1 开始,使用 NEWID() 随机排序用作排序值。从中您可以选择行号为 1 的所有行。 这种技术的效果是它随机化哪一行被分配了值 1。

WITH withTable(id, fk, val, rownum) AS 
(
SELECT
id, fk, val, ROW_NUMBER() OVER (PARTITION BY fk ORDER BY NEWID())
FROM
exampleTable
)
SELECT
*
FROM
withTable
WHERE
rownum = 1

这种方法具有额外的好处,因为它可以一次性完成分组和随机化。

关于sql - 随机聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432038/

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