Postgresql

在 PostgreSQL 中使用 WHERE 子句執行 TABLESAMPLE

  • March 12, 2020

我想使用 TABLESAMPLE 從滿足 PostgreSQL 特定條件的行中隨機抽樣。

這執行良好:

select * from customers tablesample bernoulli (1);

但我不知道如何在腳本中嵌入條件。這例如

select * from customers where last_name = 'powell' tablesample bernoulli (1);

拋出此錯誤:

SQL 錯誤

$$ 42601 $$:錯誤:“tablesample”位置或附近的語法錯誤

:71

tablesample是表的“屬性”,而不是查詢。所以你需要把它寫在表名之後:

select * 
from customers tablesample system (1)
where last_name = 'powell';

請注意,該where子句將對錶進行採樣後應用。它不會返回姓氏為“鮑威爾”的所有客戶中的 1%。但相反,它將在採樣表上應用過濾器。

我也想知道這是否可能並偶然發現了這篇文章。我沒有對 tablesample 屬性做太多研究,所以從技術上講,其他答案對你的直接問題更正確。

但是,如果您真的想通過基於條件查詢創建臨時表(或類似表)來使用 tablesample 屬性,則可以解決此問題。

create temp table powell_customers as select * from customers where last_name = 'powell';
SELECT * from powell_customers tablesample system(1); 

引用自:https://dba.stackexchange.com/questions/258271