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

Postgres:Lỗi khi sử dụng GROUP BY và ORDER (trên heroku)

Vấn đề trước mắt của bạn là bạn đang tạo SQL không hợp lệ cho PostgreSQL:

SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC

ORDER BY của bạn không khớp với phần còn lại của truy vấn. Bạn không thể sử dụng một cột trong một truy vấn được nhóm trừ khi cột đó cũng được nhóm lại hoặc nếu cột đó xuất hiện trong một hàm tổng hợp, đó là ý nghĩa của thông báo lỗi. Lý do là PostgreSQL sẽ không biết created_at của hàng nào để sử dụng khi một nhóm các hàng được kết hợp bởi mệnh đề GROUP BY; một số cơ sở dữ liệu sẽ chỉ âm thầm tự chọn một hàng, PostgreSQL thích nghiêm ngặt hơn và muốn bạn tự loại bỏ sự mơ hồ.

Hãy thử tự chỉ định đơn đặt hàng:

@categories = Micropost.select("category").group("category").order("category")

Một tùy chọn khác là sử dụng DISTINCT thay vì GROUP BY để tránh trùng lặp:

@categories = Micropost.select('DISTINCT(category)')

BTW, bạn thực sự không nên làm thứ sắp xếp đó trong một chế độ xem, bạn có thể muốn chuyển nó sang bộ điều khiển của mình.

Vấn đề thực sự của bạn là bạn đang phát triển trên cơ sở dữ liệu này trong khi triển khai trên cơ sở dữ liệu khác. Tôi khuyên bạn nên chuyển môi trường phát triển của mình sang PostgreSQL 8.3 (nếu bạn đang triển khai cơ sở dữ liệu dùng chung Heroku) hoặc PostgreSQL 9.0 (nếu bạn đang triển khai cơ sở dữ liệu chuyên dụng).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giá trị NULL của hàm Postgres cho hàng tham chiếu MỚI

  2. Làm thế nào để sử dụng Rails với tên cột viết hoa?

  3. Cập nhật hoặc Chèn (nhiều hàng và cột) từ truy vấn con trong PostgreSQL

  4. PreparedStatement rất chậm, nhưng truy vấn thủ công nhanh chóng

  5. Buộc ngắt kết nối máy khách bằng PostgreSQL