AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[random](dba)

Martin Hope
ssn
Asked: 2021-11-11 10:51:06 +0800 CST

在 PostgreSQL 中使用 generate_series() 获取不同的 random() 值

  • 0

我正在尝试生成随机数据(以卷为单位)并尝试将 PostgreSQL 的random()函数与 一起使用generate_series(),如图所示:

SELECT
  (SELECT random()) AS a,
  (SELECT random()) AS b,
FROM generate_series(1,3);

但是,我每行得到相同的随机值:

   a   |   b   
-------+-------
 0.124 | 0.443 
 0.124 | 0.443 
 0.124 | 0.443 

如何解决?

postgresql random
  • 1 个回答
  • 237 Views
Martin Hope
Rino
Asked: 2021-03-05 23:56:16 +0800 CST

在 Teradata SQL 中,如何从字段/列中获取一对之间的随机数?

  • 1

我最近在 Teradata 中遇到了一个简单的问题:如何在来自字段/列的一对数字之间获取随机数?

函数 RANDOM( lower_bound , upper_bound ) 显然仅限于接受修复号而不是字段/列名。

--THIS ONE FAILS:
WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS (
SELECT 'A', 0, 3 FROM CTE UNION ALL
SELECT 'B', 1, 9 FROM CTE UNION ALL
SELECT 'C', 2, 5 FROM CTE UNION ALL
SELECT 'D', 1, 12 FROM CTE
), CTE(DUMMY) AS (SELECT 'X')
SELECT T.*,
RANDOM(T.VAL_MIN, T.VAL_MIN) --HERE'S THE PROBLEM
FROM TRIAL T;

--THIS ONE WORKS:
WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS (
SELECT 'A', 0, 3 FROM CTE UNION ALL
SELECT 'B', 1, 9 FROM CTE UNION ALL
SELECT 'C', 2, 5 FROM CTE UNION ALL
SELECT 'D', 1, 12 FROM CTE
), CTE(DUMMY) AS (SELECT 'X')
SELECT T.*,
RANDOM(1, 7) --HERE'S THE PROBLEM
FROM TRIAL T;

我很确定有一个简单的解决方案。非常感谢任何帮助。

teradata random
  • 1 个回答
  • 173 Views
Martin Hope
Topup
Asked: 2020-03-25 18:18:50 +0800 CST

MySQL按rand排序,但结果必须存在不同的特定值

  • 0

我正在尝试从 SQL 中获取随机值,但我希望结果必须从一列中至少包含一个特定值,我该怎么做?

例如;

桌子;

id  |  category  |  name
----------------------------
1   |      1     |  A
2   |      2     |  B
3   |      3     |  C
4   |      1     |  D
5   |      3     |  E
6   |      3     |  F
7   |      2     |  G
8   |      3     |  H

当我用类别 id 查询随机四个数据时,结果并不是所有不同的类别,有时结果是这样的;

SELECT * FROM table WHERE category IN (1,2,3) ORDER BY RAND LIMIT 4

id  |  category  |  name
----------------------------
1   |      1     |  A
4   |      1     |  D
3   |      3     |  C
8   |      3     |  H

此示例中缺少类别 2,但我希望每个类别都必须在这样的结果中;

id  |  category  |  name
----------------------------
3   |      3     |  C <-- One from category 3
4   |      1     |  D <-- One from category 1
7   |      2     |  G <-- One from category 2
5   |      3     |  E <-- All categories ok, it can be random from any of them

对不起我的英语,我希望我能解释我想要什么。结果必须至少有来自 where 子句“类别 IN (X,Y,Z)”的一行。

谢谢你。

mysql random
  • 1 个回答
  • 180 Views
Martin Hope
user1525248
Asked: 2018-06-28 00:43:30 +0800 CST

如何用随机名称替换用户名?

  • 2

如何仅在 mysql DB 上使用 SQL使用两个相关表中的随机名称替换users表中真实用户的名字和姓氏: random_first_names和random_last_names。我们的 users 表包含超过 25 万条记录,每个 rundome 表都包含超过 5000 个名称,应该为users表中的每条记录随机选择。是否可以仅使用 SQL 来实现?

[更新]

我根据 Rick 的输入解决了这个问题,并在下面分享了完整的 SQL 脚本。

mysql random
  • 3 个回答
  • 6186 Views
Martin Hope
J C
Asked: 2018-06-16 07:41:18 +0800 CST

SQL TOP 语句,如何确保它是“随机的”?

  • 0

我在研究 SQL 时遇到了 TOP 语句。IE

SELECT TOP 2 * FROM Persons 

从表 Persons 中选择最多 2 行。

但是,如果我出于统计原因使用它,我希望这样的过程是随机的:即独立于表中的时间和顺序。

我的问题是:

  1. 如何确保 TOP 语句是完全“随机的”(它的选择不是有序的)?此外,如何确保 TOP 语句是针对某些变量(即年龄)排序的

  2. TOP 语句实际上是如何工作的?

random
  • 1 个回答
  • 706 Views
Martin Hope
joanolo
Asked: 2016-12-27 12:27:58 +0800 CST

如何(最佳)从两个表(a,b)中获取(a.id,b.id)对的随机样本?

  • 3

假设我必须非常简单的表格

CREATE TABLE a(id integer PRIMARY KEY, 
       t timestamp default now(), 
       sensor_readings real[]);
CREATE TABLE b(id integer PRIMARY KEY, 
       t timestamp default now(), 
       sensor_readings real[]);

有一些关于他们的数据

INSERT INTO a(id) SELECT generate_series(    1,   100);
INSERT INTO b(id) SELECT generate_series(10001, 10100);

实际上,表 a 可能有大约 100_000 行,而表 b 大约有 50_000 行。在实践中,id 序列也可能有间隙(大约 %)。因此,笛卡尔积 axb 具有数十亿的基数。

我想随机抽取 1_000 个排序对(a.id,b.id)。我可以使用类似以下查询的内容:

SELECT  
    *
FROM
(
    SELECT
        *
    FROM
        (
        SELECT 
            a.id AS a_id, b.id AS b_id
        FROM
            a CROSS JOIN b
        ORDER BY
            random()
        ) AS s0
    LIMIT
        1000 
) AS s1
ORDER BY
    a_id, b_id ;

...但是一旦 a 或 b 上的行数增加(由于 CROSS JOIN 的增长),它就会变得非常低效。

有没有办法以最佳方式做与此等效的事情?也就是说,是否有一种实用的方法可以从a x b关系中获取随机行样本,而无需实际实例化它。

注意:对于 a.id 或 b.id 可以重复的事实没有限制。虽然这对 (a.id, b.id) 不能。

如果我试图用命令式语言对此进行编程,我很可能会使用循环并执行类似以下伪代码的操作(然后,请统计学家对其进行检查,以确保我真的采取了样本其中所有对具有相同的被选中概率):

start with a result set equal to {} (empty set)
while size of result set < 1000
    Pick the id value from a random row from table a -> rand_id_a
    Pick the id value from a random row from table b -> rand_id_b
    If (rand_id_a, rand_id_b) not in result set
        append (rand_id_a, rand_id_b) to result set
    end if
end while
sort result set and return it

有没有办法在不求助于循环的情况下获得等效的结果?如果没有,是否有使用 plpgSQL 的有效方法?(或任何其他语言)

postgresql random
  • 2 个回答
  • 2569 Views
Martin Hope
H. Pauwelyn
Asked: 2015-10-26 06:31:44 +0800 CST

用另一个表 B 中的随机 ID 填充表 A

  • 2

我有两个表,我想用随机值的表的 ID更新表中的列。GebruikerIDTopicGebruiker

您还必须了解以下事项:

  • Topic.GebruikerID参考Gebruiker.ID.
  • 并非每个 ID 都在两个表中都使用。
  • 必须生成的随机数存在于表Gebruiker(列ID)中,必须更新到表Topic(列GebruikerID)中。
  • 我在速成版中使用 SQL Server。

这里有一些图像。

  • 表之间的关系

  • Gebruiker-table的 ID

sql-server random
  • 2 个回答
  • 6575 Views
Martin Hope
H. Pauwelyn
Asked: 2015-10-25 08:13:17 +0800 CST

为每一行和每一列制作随机数

  • 4

我将在我的数据库中编辑一些虚假数据。但是,如果我将为每一行和每一列制作随机数,它就不会像我想要的那样随机。结果可以在下图中看到。

没有随机数

这是我使用的代码:

WITH x AS 
(
    SELECT mintwee, mineen, nul, pluseen, plustwee 
    FROM Topic
)
SELECT mintwee = CAST(RAND()*100 AS INT),
       mineen = CAST(RAND()*100 AS INT), 
       nul = CAST(RAND()*100 AS INT),
       pluseen = CAST(RAND()*100 AS INT),
       plustwee = CAST(RAND()*100 AS INT)
FROM x

和这个:

WITH x AS 
(
    SELECT 
        mintwee = CAST(RAND()*100 AS INT), 
        mineen = CAST(RAND()*100 AS INT),
        nul = CAST(RAND()*100 AS INT), 
        pluseen = CAST(RAND()*100 AS INT), 
        plustwee = CAST(RAND()*100 AS INT)
    FROM Topic
)
SELECT mintwee, mineen, nul, pluseen, plustwee
FROM x ;

但两者的结果相同。我知道,我必须使用一个UPDATE语句,但这只是在结果好的情况下尝试。之后,我将使用该UPDATE语句。

我使用带有 express 2014 版本的 SQL Server。

sql-server random
  • 2 个回答
  • 12154 Views
Martin Hope
user62547
Asked: 2015-04-30 05:57:44 +0800 CST

如何随机选择日期?

  • 5

我在 Bash Shell 脚本中使用此代码来检索随机日期。

在 Microsoft SQL Server 中有没有办法做到这一点?

我可以想象通过单个 SELECT 查询,并且可能通过调用一些可以以某种方式轻松执行的函数。

sql-server random
  • 2 个回答
  • 2154 Views
Martin Hope
Rana
Asked: 2015-03-31 08:53:49 +0800 CST

在 PostgreSQL 中采样

  • 4

我正在寻找在 PostgreSQL 中随机抽样的可能方法。我发现了几种具有不同优点和缺点的方法。天真的方法是:

select * from Table_Name
order by random()
limit 10;

另一种更快的方法是:

select * from Table_Name
WHERE random() <= 0.01
order by random()
limit 10;

(虽然 0.01 取决于表格大小和样本大小;这只是一个示例。)

在这两个查询中,都会为每一行生成一个随机数,并根据这些随机生成的数字进行排序。然后在排序后的数字中选择前10个作为最终结果,所以我认为这些应该是抽样而不是替换。

现在我想做的是以某种方式将这种采样方法变成带替换的采样。这怎么可能?或者在 PostgreSQL 中有没有其他可以替换的随机抽样方法?

我不得不说我确实知道这怎么可能,但我不知道如何在 Postgres 中实现它。这是我的想法:

如果我们不是生成一个随机值,而是生成样本大小为 的随机S值S,然后对所有随机生成的值进行排序,它将进行带放回抽样。(我不知道我是否正确。)
此时我不介意查询的性能。

postgresql random
  • 2 个回答
  • 4418 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve