Postgresql
在 PostgreSQL 中使用 WHERE 子句執行 TABLESAMPLE
我想使用 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);