PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

डेटाबेस से नमूना पंक्ति को एक-एक करके कैसे वापस करें

एक order by हमेशा महंगा होगा विशेष रूप से यदि क्रम में अभिव्यक्ति अनुक्रमित नहीं है। तो आदेश मत दो। इसके बजाय count() . में एक यादृच्छिक ऑफसेट करें जैसा कि आपके प्रश्नों में है, लेकिन यह सब एक ही बार में करें।

with t as (
    select *
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select count(*) from t))
limit 1

यह संस्करण तेज़ हो सकता है

with t as (
    select *, count(*) over() total
    from
        products p
        inner join
        images i using (productid)
    where
        prodtype = $sometype
)
select *
from t
offset floor(random() * (select total from t limit 1))
limit 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ActiveModel ID श्रेणी को 8 बाइट तक बढ़ाएँ

  2. दिए गए महीने के लिए सप्ताह के अंतराल की श्रृंखला उत्पन्न करें

  3. PostgreSQL को लंबवत रूप से स्केल करना

  4. क्या निर्धारित करता है कि रेल में तालिका परिभाषा में आईडी ::सीरियल शामिल है?

  5. एक पोस्टग्रेज लिखें SQL क्वेरी प्राप्त करें या बनाएं