选择所有列,并按一个特定列进行区分

时间:2017-10-10 11:13:50

标签: sql hive

我使用HIVE进行查询,我喜欢查询所有列并基于不同的特定一列。

例如我有表a;

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

我希望查询所有具有唯一StudentID的学生

从a中选择*,distinct(StudentID);

我应该如何编写查询?

非常感谢

2 个答案:

答案 0 :(得分:3)

为什么会StudentId重复?这听起来像是你申请中的一个问题。

获取唯一的StudentId s:

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;

编辑:

在Hive中,您将使用窗口函数:

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

注意:如果您想要所有StudentId一行行,那么您可以使用row_number()代替count(*)

答案 1 :(得分:0)

查询写如:

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

示例:

SELECT DISTINCT StudentID FROM a;