[RUBY-ON-RAILS] PG는 :: 오류 : DISTINCT SELECT, 표현 BY ORDER은 선택 목록에 표시되어야합니다
RUBY-ON-RAILSPG는 :: 오류 : DISTINCT SELECT, 표현 BY ORDER은 선택 목록에 표시되어야합니다
나는 이벤트 웹 사이트를 만드는 그리고 난 이벤트의 시작 시간에 의해 렌더링 된 답장을 정렬하는 데 노력하고있어. 거기에 내가 별개로 그룹화하고있어 그래서 답장이 많이 있습니다,하지만 난 PG에 팝업이 오류없이 결과를 정렬에 지난 몇 일 동안 많은 어려움을 가지고 있었어요. 나는 주제에 대한 이전의 몇 가지 질문을 검토 한 결과 여전히 꽤 손실입니다. 어떻게이 작업을 얻을 수 있나요? 정말 고맙습니다!
@rsvps = Rsvp.where(:voter_id => current_user.following.collect {|f| f["id"]}, :status => 'going').where("start_time > ? AND start_time < ?", Time.now, Time.now + 1.month).order("count_all desc").count(:group => :event_id).collect { |f| f[0] }
<%= render :partial => 'rsvps/rsvp', :collection => Rsvp.where(:event_id => @rsvps).select("DISTINCT(event_id)").order('start_time asc') %>
해결법
-
==============================
1.DISTINCT가 적용된 후 ORDER BY 절에만 적용 할 수 있습니다. SELECT 문에서 필드 만이 DISTINCT 작업을 위해 고려되기 때문에, 그 유일한 필드는 주문에 의해 사용할 수 있습니다.
DISTINCT가 적용된 후 ORDER BY 절에만 적용 할 수 있습니다. SELECT 문에서 필드 만이 DISTINCT 작업을 위해 고려되기 때문에, 그 유일한 필드는 주문에 의해 사용할 수 있습니다.
당신은 단지 한 event_id 값의 고유 한 목록을 원하는 경우 논리적으로, 그들은 무관해야한다 무엇을에서 발생하는 주문하십시오. 순서가 중요합니까 경우 순서에 대한 상황이 있도록, 당신은 SELECT 목록에 start_time을 추가해야합니다.
또한,이 두 SELECT 절은 해당되지 않으므로주의 :
SELECT DISTINCT(event_id, start_time) FROM ... SELECT DISTINCT event_id, start_time FROM ...
두 번째는 당신이 원하는 형태입니다. 첫 번째 행의 구조로 표현되는 데이터를 일련의 레코드 (튜플 내부 단일 열)를 반환한다. 두 번째 출력되는 데이터의 정상 열을 반환한다. 그것은 단지 하나의 열이기 때문에 ROW 구조가 아래로 감소된다 단일 열 경우 예상대로에만 작동합니다.
-
==============================
2.나는이 다소 오래된 질문 알지만, 난 그냥 내가 포스트 그레스는 열 BY SELECT DISTINCT / 주문이 보이는 이상한 제한이 이유를 이해 도움이 내 머리에 작은 예를 통해 갔다.
나는이 다소 오래된 질문 알지만, 난 그냥 내가 포스트 그레스는 열 BY SELECT DISTINCT / 주문이 보이는 이상한 제한이 이유를 이해 도움이 내 머리에 작은 예를 통해 갔다.
당신이 당신의 RSVP 테이블에 다음과 같은 데이터가 있다고 가정 해 보겠습니다 :
event_id | start_time ----------+------------------------ 0 | Mar 17, 2013 12:00:00 1 | Jan 1, 1970 00:00:00 1 | Aug 21, 2013 16:30:00 2 | Jun 9, 2012 08:45:00
이제 각각의 start_times의 지시 별개의 event_ids의 목록을 잡아 싶어요. 그러나 1 어디를 가야하나요? 하나의 튜플이 1970년 1월 1일에 시작하기 때문에이 먼저 온 경우, 또는 때문에 2013년 8월 21일의 마지막 가야하나요?
데이터베이스 시스템은 (가정 EVENT_ID이 고유)에서 작동 될 수있는 실제 데이터에 의존 할 수없는 당신을 위해 그 결정 및 쿼리의 구문을 만들 수 없습니다, 우리는 단지 SELECT 절에서 열을 기준으로 정렬 제한됩니다 .
실제 문제에 관해서는 - 매튜의 대답에 대한 대안은 정렬 MIN 또는 MAX 같은 집계 함수를 사용하고 있습니다 :
SELECT event_id FROM Rsvp GROUP BY event_id ORDER BY MIN(start_time)
START_TIME에 명시 적 그룹화 및 집계 결과 튜플의 명확한 주문을 마련하기 위해 데이터베이스를 허용합니다. 가독성은 확실히이 경우에 문제가 있다는 점에 유의)
-
==============================
3.당신이 START_TIME 컬럼을 사용하고 있기 때문에, 당신은 PostgreSQL을의 창 기능 중 하나 인 ROW_NUMBER ()를 사용하고 그것을 적재 할 수 있습니다
당신이 START_TIME 컬럼을 사용하고 있기 때문에, 당신은 PostgreSQL을의 창 기능 중 하나 인 ROW_NUMBER ()를 사용하고 그것을 적재 할 수 있습니다
당신은 또한 당신의 요구 사항에 따라 서로 다른 창 기능을 사용할 수 있습니다.
from https://stackoverflow.com/questions/12693089/pgerror-select-distinct-order-by-expressions-must-appear-in-select-list by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] Heroku가에 sqlite3를 함께 레일을 누르면에 실패 [중복] (0) | 2020.02.12 |
---|---|
[RUBY-ON-RAILS] JS보기에서 어떻게 ERB 코드로 자바 스크립트 변수를 전달하는 방법? (0) | 2020.02.12 |
[RUBY-ON-RAILS] 유증에 대한 사용자 인증 전략 (0) | 2020.02.12 |
[RUBY-ON-RAILS] JSON 출력에 가상 속성을 추가합니다 (0) | 2020.02.12 |
[RUBY-ON-RAILS] will_paginate와 루비의 배열을 Paginating (0) | 2020.02.12 |