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

तालिका सक्रिय रिकॉर्ड क्वेरी को रेल करने के लिए एसक्यूएल में शामिल हों

अगर आपका Review . के बीच कोई संबंध है और Audio फिर कुछ इस तरह:

revs = Review.joins(:audios)
             .group('style_id')
             .select('style_id, avg(col1) as avg_col1, avg(col2) as avg_col2')

यह Review . की एक सूची देगा revs . में उदाहरण और उन उदाहरणों में अतिरिक्त avg_col1 . होगा और avg_col2 औसत और साथ ही सामान्य style . तक पहुंचने के तरीके /style_id विधियाँ लेकिन अन्य स्तंभ अभिगम विधियाँ जो Review आम तौर पर पेशकश करेगा अपवाद उठाएगा।

यदि आपके पास एसोसिएशन स्थापित नहीं है तो आप मैन्युअल रूप से जॉइन कर सकते हैं:

revs = Review.joins('join audios on reviews.consumer_id = audios.consumer_id')
             .group('style_id')
             .select('style_id, avg(col1) as avg_col1, avg(col2) as avg_col2')

यदि आपको केवल सभी ActiveRecord रैपिंग और ओवरहेड के बिना केवल कच्चा डेटा चाहिए, तो आप कच्चे SQL को निष्पादित कर सकते हैं और select_rows :

समीक्षा से
Review.connection.select_rows(%q{
    select r.style_id, avg(a.col1), avg(a.col2')
    from reviews r
    join audios  a on r.consumer_id = a.consumer_id
    group by r.style_id
}).map do
  { :style_id => r.shift, :avg_col1 => r.shift.to_f, :avg_col2 => r.shift.to_f }
end

यह आपको हैश का एक ऐरे देगा। आप Struct का उपयोग करके उस दृष्टिकोण को सरल भी बना सकते हैं सरल डेटा आवरण वर्ग बनाने के लिए:

c    = Struct.new(:style_id, :avg_col1, :avg_col2)
revs = Review.connection.select_rows(%q{...}).map do |r|
  c.new(r.shift, r.shift.to_f, r.shift.to_f)
end

पुनश्च:अपने एसक्यूएल में निहित शर्तों का उपयोग न करें, यह क्रॉस उत्पादों का उत्पादन करने का एक त्वरित और आसान तरीका है, स्पष्ट रूप से शामिल होने की शर्तों का उपयोग करें:

SELECT ...
  FROM reviews JOIN audios ON reviews.consumer_id = audios.consumer_id
 GROUP BY style_id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आयात psycopg2 लायब्रेरी लोड नहीं:libssl.1.0.0.dylib

  2. psql . में स्थितीय पैरामीटर ($1,..) का उपयोग करना

  3. पोस्टग्रेस अपवाद:क्वेरी द्वारा कोई परिणाम नहीं लौटाया गया।

  4. JSON कॉलम से औसत की गणना करें

  5. JPA, PostgreSQL और NULL मानों के साथ JodaTime