我有这样的数据:
Name Age
-------------------
HieuDoan 15
LinhNa 16
HieuDoan 20
NamL 17
我想选择没有重复数据的所有行,我需要的结果是:
Name Age
-------------
LinhNa 16
NamL 17
我如何查询?数据源是Redshift。
谢谢大家。
答案 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;
内部查询将返回name
,age
和count of names
,外部查询将使用count=1
过滤出名称。
以下是输出。
您可以查看演示here