在where

时间:2017-02-28 17:17:11

标签: postgresql

我正在尝试使用RANDOM函数从表中选择随机行。

我要做的是,类别1的行有50%的可能性被选中,而类别2的行有25%的机会被选中。

在我的测试数据库中,table1中只有三条记录。它们与表2相结合以获得类别。

所有三个记录都有第1类。

如果我运行以下SQL

SELECT T2.category, T1.*
FROM table1 T1 
LEFT JOIN table2 T2 ON T1.id=T2.id
WHERE 
  ( T2.category=1 AND (TRUNC(RANDOM() * 100 ) < 50) ) OR
  ( T2.category=2 AND (TRUNC(RANDOM() * 100 ) < 25) )

我总是得到零或全部3条记录。如果我删除最后一行,那么SQL看起来像这样

SELECT T2.category, T1.*
FROM table1 T1 
LEFT JOIN table2 T2 ON T1.id=T2.id
WHERE 
( T2.category=1 AND (TRUNC(RANDOM() * 100 ) < 50) )
)

一切都按预期工作。记录随机出现(我有时会得到0,1,2或3条记录),但当然我无法根据类别区分被选中的机会。

为什么?我不明白我删除的行可以影响返回的记录数,因为我的所有记录都是类别1(我删除的行是category = 2)

0 个答案:

没有答案