2016-10-31 15 views
0

一意の値を選択するためのステートメントを検索しようとしています。 distinct/uniqueがありません。これらは重複を削除するだけです。一意のすべての値のリストを取得したいのですが、1つのエントリだけです。例えばSQLは一意の値を見つける

値:1、2、3、4、4、5、5、6

Iを取得したいと思います:1、2、3、6

EDIT:

問題は次のとおりです。 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

を使用してください。 – user1929959

答えて

4

一つの簡単な方法は、group byhavingを使用しています:

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

Okey、これはちょっと役立ちます。しかし、私はどの値(人物)が199以上のユニークな値(スタンプ)を持っているかを知りたい。 199を超える人を見つけるために別のカウントを使用することはできますか? – Br0dskive

+0

@ Br0dskiveこの新しい要件を反映した、より詳細なサンプルと結果を提供できますか? – JohnHC

+0

@JohnHC詳細を質問に更新しました:) – Br0dskive

0

あなたは俳優や文字ごとにフィルムをカウントするので、あなたは、これら2つのグループによって必要があります。

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本の映画(すなわち関係なく、役割または1つしかない場合ロールまたは複数)で、いくつかの役割を果たした俳優にのみ関心がある場合でも、あなたは同じ最初にしてくださいと俳優ごとに一意の行に沸騰させてください:

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; 
関連する問題