PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Bảng tham gia sql để rails truy vấn bản ghi hoạt động

Nếu bạn có sự liên kết giữa ReviewAudio sau đó một cái gì đó như thế này:

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

Điều đó sẽ cung cấp danh sách Review các phiên bản trong revs và những trường hợp đó sẽ có thêm avg_col1avg_col2 các phương pháp để truy cập giá trị trung bình cũng như style thông thường / style_id ngoại trừ các phương pháp của trình truy cập cột khác mà Review thông thường cung cấp sẽ đưa ra các ngoại lệ.

Nếu bạn chưa thiết lập các liên kết thì bạn có thể thực hiện THAM GIA theo cách thủ công:

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')

Nếu tất cả những gì bạn cần chỉ là dữ liệu thô mà không có tất cả gói ActiveRecord và chi phí, thì bạn có thể thực thi SQL thô và băm nó bằng tay bằng cách sử dụng 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

Điều đó sẽ cung cấp cho bạn một Mảng băm. Bạn thậm chí có thể đơn giản hóa cách tiếp cận đó bằng cách sử dụng Struct để tạo các lớp trình bao bọc dữ liệu đơn giản:

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

Tái bút:Không sử dụng các điều kiện kết hợp ngầm định trong SQL của bạn, đó chỉ là một cách nhanh chóng và dễ dàng để tạo ra các sản phẩm chéo, hãy sử dụng các điều kiện kết hợp rõ ràng:

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. di chuyển rails:postgresql cho md5 của chuỗi ngẫu nhiên làm mặc định

  2. SQLAlchemy Core - tạo biểu thức PostgreSQL SUBSTRING?

  3. Khóa ngoại + kế thừa bảng trong PostgreSQL?

  4. Lỗi:không thể xác định phiên bản PostgreSQL từ '10 .3 '- Django trên Heroku

  5. EXECUTE ... INTO ... USING câu lệnh trong PL / pgSQL không thể thực thi thành một bản ghi?