选择无重复行

时间:2017-08-14 04:19:51

标签: sql duplicates

我有这样的数据:

Name        Age
-------------------
HieuDoan    15
LinhNa      16
HieuDoan    20
NamL        17

我想选择没有重复数据的所有行,我需要的结果是:

Name    Age
-------------
LinhNa  16
NamL    17

我如何查询?数据源是Redshift。

谢谢大家。

3 个答案:

答案 0 :(得分:1)

尝试这个嵌套查询:

select name, age from (select *, count(*) as no from student group by name) where no = 1;

我在sqlite3中的实验返回的记录集:

LinhNa|16
NamL|17

答案 1 :(得分:1)

根据你的例子,不考虑这样的事实,因为姓名和年龄对于不同的人可以是相同的,在Oracle中,我会做这样的事情,使用窗口函数

SELECT * 
FROM 
    (SELECT A.*, 
            count(name) over (partition by name order by name) as cnt 
     FROM MY_TABLE A) 
WHERE cnt = 1

答案 2 :(得分:0)

如果您只需要选择没有重复数据的所有行,可以采用以下方法。

SELECT name, age from
      (SELECT name, age,
         (SELECT count(*)
          FROM table1 t1
          WHERE t1.name = t2.name
          GROUP BY t1.name) AS c1
       FROM table1 t2) table2
    WHERE c1 = 1;

内部查询将返回nameagecount of names,外部查询将使用count=1过滤出名称。

以下是输出。

enter image description here

您可以查看演示here