2016-10-31 5 views
0

고유 값 선택에 대한 설명을 찾으려고합니다. 고유/고유하지 않으므로 중복 된 항목 만 제거하십시오. 고유 한 모든 값 목록을 가져오고 싶습니다. 단 하나의 항목입니다.SQL 고유 값 찾기

예를 들어

:

값 : 1, 2, 3, 4, 4, 5, 5, 6

싶습니다

는 얻을 : 1, 2, 3, 6

편집 :

문제 : 199 명이 넘는 영화에서 어떤 배우 (영화의 이름과 수)가 독특한 캐릭터 이름으로 역할을 했습니까?

이들은

내 테이블입니다 :

Table "public.filmparticipation" 
    Column | Type | Modifiers 
----------+---------+----------- 
partid | integer | 
personid | integer | not null 
filmid | integer | not null 
parttype | text | not null 


Table "public.filmcharacter" 
    Column  | Type | Modifiers 
---------------+---------+----------- 
partid  | integer | 
filmcharacter | text | 
billingpos | integer | 


Table "public.person" 
    Column |  Type  | Modifiers 
-----------+--------------+----------- 
personid | integer  | 
lastname | text   | not null 
firstname | text   | 
gender | character(1) | 

이 내가 생각 솔루션 근처에도 아니에요 비록 내가 지금까지 시도한 것입니다 :

SELECT p.firstname, COUNT(fp.filmid) 
FROM person p INNER JOIN filmparticipation fp 
ON p.personid = fp.personid 
INNER JOIN filmcharacter fc 
ON fc.partid = fp.partid 
GROUP BY p.firstname 
HAVING COUNT(fc.filmcharacter) = 1; 

감사합니다.

+0

을 사용하면 조금 도움이 DISTINCT – user1929959

답변

4

하나의 간단한 방법은 group byhaving을 사용

select val 
from t 
group by val 
having count(*) = 1; 
+0

좋아요를 선택합니다. 그러나 나는 어떤 가치 (인물)가 199 가지 이상의 고유 한 가치 (우표)를 가지고 있는지 찾아야한다. 다른 카운트를 사용하여 199 명이 넘는 사람들을 찾을 수 있습니까? – Br0dskive

+0

@ Br0dskive이 새로운 요구 사항을 반영한보다 자세한 샘플과 결과를 제공 할 수 있습니까? – JohnHC

+0

@JohnHC 자세한 내용으로 질문을 업데이트했습니다. – Br0dskive

0

당신은 배우와 문자 당 영화를 계산하려면, 그래서 당신은이 두 그룹화해야합니다.

select p.personid, p.firstname, p.lastname, fc.filmcharacter, count(distinct fp.filmid) 
from person p 
join filmparticipation fp on fp.personid = p.personid 
join filmcharacter fc on fc.partid = fp.partid 
group by p.personid, p.firstname, p.lastname, fc.filmcharacter 
having count(distinct fp.filmid) > 199; 
최소한 200 영화에서 어떤 역할을 배우에만 관심이있다하더라도

(즉, 어떤 역할에 상관없이 또는 하나의 역할 또는 둘 이상이있는 경우), 같은 첫 번째 할 거라고 및 그런 다음에야 배우마다 고유 한 행에 그 졸이다 :

select distinct p.personid, p.firstname, p.lastname 
from person p 
join filmparticipation fp on fp.personid = p.personid 
join filmcharacter fc on fc.partid = fp.partid 
group by p.personid, p.firstname, p.lastname, fc.filmcharacter 
having count(distinct fp.filmid) > 199;