2017-10-10 7 views
-1

クエリにHIVEを使用しました。すべての列を照会し、固有の特定の1列に基づいています。すべての列を選択して特定の列で区別する

たとえば、私はテーブルaを持っています。私はユニークなStudentID持つすべての学生を照会したい

StudentID 
StudentName, 
StudentBirsthDay, 
StudentPassport; 
StudentAge; 
StudentRegisted; 
.... 
.... 

、から

選択*、明確な(StudentID)。

どのようにクエリを書く必要がありますか?

+2

使用しているRDBMSを示している(MySQLやハイブ?)といくつかを、もう少し明確に問題を説明してくださいしてくださいサンプルデータ。 –

+0

同じstudentidの行が複数ある場合は、どちらの行を返す必要がありますか? –

+0

こんにちは、ハイブを使用しています。studentIDを区別してすべての列を印刷するのが好きです。 – user2953788

答えて

2

たくさん

おかげで、なぜStudentId複製されることでしょうか?それはあなたのアプリケーションの問題のように思えます。

ユニークStudentId秒取得するには:あなたはさまざまな方法ですべての列を取得することができます

select StudentId 
from t 
group by StudentId 
having count(*) = 1; 

を、しかし、すべてのデータベースで動作する一つの方法はjoin次のとおりです。

select t.* 
from t join 
    (select StudentId 
     from t 
     group by StudentId 
     having count(*) = 1 
    ) tt 
    on t.StudentId = tt.StudentId; 

EDIT:

ハイブでは、ウィンドウ関数を使用します。

select t.* 
from (select t.*, count(*) over (partition by StudentId) as cnt 
     from t 
    ) t 
where cnt = 1; 

注:すべてのStudentId秒間行を望んでいた場合は、あなたの代わりにcount(*)row_number()を使用します。

+0

私はすべての列をクエリする必要がありますが、あなたのケースでは1つのStudentID列しか表示できません。 – user2953788

+0

すべてのデータがログから収集されるため、StudentIDを複製できます。 – user2953788

+0

@ user2953788 。 。 2番目のクエリはすべての列を取得します。 –

0

クエリ書き込みのように:

SELECT DISTINCT column1, column2, ... 
    FROM table_name; 

例:

SELECT DISTINCT StudentID FROM a; 
関連する問題