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

बड़े डेटासेट से रैंडम सैंपलिंग

select
   T1.sex,
   T1.decades,
   T1.counts,
   T2.patid

from (

   select 
      sex, 
      age/10 as decades,
      COUNT(*) as counts
   from (

      select  m.patid,
         m.sex,
         DATEPART(year,min(c.admitdate)) -m.yrdob as Age
      from members as m
      inner join claims as c on c.patid=m.PATID
      group by m.PATID, m.sex,m.yrdob
   )x 
   group by sex, Age/10
) as T1
join (
   --right here is where the random sampling occurs
    SELECT TOP 50--this is the total number of peolpe in our dataset
      patid
      ,sex
      ,decades

   from (
      select  m.patid,
         m.sex,
         (DATEPART(year,min(c.admitdate)) -m.yrdob)/10 as decades
      from members as m
      inner join claims as c on c.patid=m.PATID
      group by m.PATID, m.sex, m.yrdob

   ) T2
      order by NEWID()
) as T2
on T2.sex = T1.sex
and T2.decades = T1.decades 

संपादित करें:मैंने इसी तरह का एक और प्रश्न पोस्ट किया था जिसमें मैंने पाया कि मेरे परिणाम वास्तव में यादृच्छिक नहीं थे, लेकिन वे केवल शीर्ष एन परिणाम थे। मैंने newid() . द्वारा आदेश दिया था सबसे बाहरी क्वेरी में और जो कुछ भी कर रहा था वह ठीक उसी परिणाम सेट के आसपास फेरबदल कर रहा था। एक प्रश्न से जो अब बंद हो चुका है, मुझे पता चला कि मुझे TOP . का उपयोग करने की आवश्यकता है कीवर्ड के साथ order by newid() उपरोक्त प्रश्न में टिप्पणी की गई पंक्ति में।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2017 स्थापना

  2. SSRS सदस्यता फ़ाइल का नाम w/ दिनांक

  3. SQL सर्वर:DELETE बनाम TRUNCATE

  4. SQL सर्वर में NEWID () बनाम NEWSEQUENTIALID ():क्या अंतर है?

  5. SQL सर्वर में CAST () बनाम TRY_CAST ():क्या अंतर है?