2013-04-20 1 views
0

내가 회원의 절반 이상이 'Y'에 대한 의견을 설정 한 상태에서이 테이블데이터를 선택합니다 'Y'

evaluation([id_member, id_article], opinion) 

내가 id_article 선택하기 위해 노력했다. 예를 들어

: 쿼리가 두 개의 행 중 한 사람 (2 번째의 상품을위한) 제 2 선택해야

(1, 1, NULL) 
(2, 1, NULL) 
(1, 2, NULL) 
(2, 2, 'Y') 

은 'Y'를 포함한다.

나는 그것을하는 방법을 찾을 수 없다!

[]id_memberid_article이 기본 키를 구성한다는 것을 의미합니다.

+0

은'opinion' A 열에 NUMBER''또는'VARCHAR2'인가? 샘플 데이터는 숫자이며, 질문의 텍스트는 한 문자열 ("Y"또는 "N")을 말하며, 질문의 주제는 '예'와 같은 다중 문자열을 말합니다. 세 가지는 맞습니까? –

+0

지금 제 코드를 보았습니다. 'opinion'은'Y' 또는'NULL'입니다. – mpluse

+0

OK. 그렇다면 샘플 데이터를 업데이트 할 수 있습니까? –

답변

5

의견 경우 문자열 :

SELECT id_article 
FROM 
Evaluation 
GROUP BY id_article 
HAVING 
AVG(CASE OPINION WHEN 'Y' THEN 1.0 ELSE 0.0 END) >= 0.5 

의견 소수 인 경우 (0.0 가정 또는 1.0) 다음 의견 정수인 경우

SELECT id_article 
FROM 
Evaluation 
GROUP BY id_article 
HAVING 
AVG(Opinion) >= 0.5 

(0을 가정 또는 1)을

SELECT id_article 
FROM 
Evaluation 
GROUP BY id_article 
HAVING 
AVG(Opinion*10) >= 5 
+0

고마워요 :) – mpluse

+0

한 가지 더 질문 : 'AND id_article IN' 다른 SELECT를 사용할 수 있습니까? 죄송합니다. 테스트 할 DBMS가 없습니다. – mpluse

+0

아니, 당신은 다음 쓰기 테이블 이름 후 GROUP BY 절 전에 ... where 절에서 그렇게해야합니다 WHERE IN id_article (SELECT .....) 대부분의 경우 그러나 I WHERE EXISTS (SELECT * FROM sometable WHERE sometable.id_Article = Evaluation.id_Article) –

0

이것은 having 절을 사용할 수있는 절호의 기회입니다.

select blah, blah, blah 
from evaluation join other tables as required 
where whatever 
having (sum(opinion)/count(*)) * 100 > 50 
+0

'group by '은 어디에 있습니까? 분수가 반전됩니다. –

+0

'group by'을 사용할 수 있습니까? – mpluse

+0

같은 질문 @EgorSkriptunoff – mpluse

0

다음은 효율을위한 방법입니다. 언더 알 ratio_to_report를 사용하여 전체 행 점점 ntly() 함수 분석 :

select 
    id_member, 
    id_article, 
    opinion 
from 
    (select id_member, 
      id_article, 
      opinion, 
      ratio_to_report(case when opinion 'Y' then 1 else 0 end) 
      over (partition by id_article) rtr 
    from evaluation) 
where 
    rtr >= 0.5; 
관련 문제