gpt4 book ai didi

sql - 为什么 where 子句中的 random() 函数会导致查询返回多于或少于一行?

转载 作者:行者123 更新时间:2023-12-02 09:36:50 26 4
gpt4 key购买 nike

这个查询怎么可能返回多行?它如何返回零行?

WITH cte(k,v) AS (VALUES (0,'A'), (1,'B'), (2,'C'))
SELECT * FROM cte WHERE k=round(random()*2);

有时它返回一行,有时返回两行或三行,有时不返回。但是,如果 random() 函数返回一个值,则该值只能与表中的一行匹配,对吗?如果我将其乘以 2 并四舍五入为整数,则返回值必须为 012 因此必须精确匹配一行,对吗?

如果我将 random() 调用放入子查询中,如下所示:

WITH cte(k,v) AS (VALUES (0,'A'), (1,'B'), (2,'C'))
SELECT * FROM cte WHERE k=(select round(random()*2));

那么它只会返回一行,正如我在没有子查询的情况下所期望的那样。

以及查询

SELECT round(random()*2);

只返回一行,其中一列的值为 012,所以我不明白如何它可以匹配 cte 表中除一行之外的任何内容。然而,在上面的第一个查询中,有时它似乎匹配多于或少于一行。这是怎么回事?

最佳答案

正如其他人所述,为每一行调用random()

如果您想要单个随机行,您可以使用 ORDER BY random() 子句,然后 LIMIT 将结果限制为单个行,如下所示(未测试) ):

WITH cte(k,v) AS (VALUES (0,'A'), (1,'B'), (2,'C'))
SELECT * FROM cte ORDER BY random() LIMIT 1;

关于sql - 为什么 where 子句中的 random() 函数会导致查询返回多于或少于一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25033730/

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