2017-08-14 93 views
-3

我有这样的数据:选择不重复的行

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

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

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

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

谢谢大家。

+3

你尝试过什么?向我们显示您的查询 –

+0

2人拥有相同的姓名很常见,您的要求背后的商务逻辑是什么? – tibetty

+0

也指定你正在使用的DBMS – Hatik

回答

1

根据你的榜样,而不是考虑的事实,使得这样的查询是错误的,因为名称和年龄可以是相同的不同的人,在甲骨文我会做这样的事情,使用窗口功能

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

试试这个嵌套查询:

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

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

LinhNa|16 
NamL|17 
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