我有一张看起来像这样的表:
NAME Col1 Col2 Col3
Tim 1 2 3
Tim 1 1 2
Tim 2 1 2
Dan 1 2 3
Dan 2 2 1
Dan 2 1 3
我试图制作一个SELECT命令,结果如下:
NAME Col1 Col2 Col3
Tim 2 1 2
Dan 2 2 1
所以我想要不同的名字,但选择所有四列,其中Col1 = 2。 我在这里使用解决方案来获得独特的部分: SQL/mysql - Select distinct/UNIQUE but return all columns?
但是当我将select Col1 = '2'
添加到select语句的WHERE部分时,并不会返回Col1为2的所有名称,因为我认为它首先查看不同的名称,而不是1,因此获取该结果。
希望我有道理,有人可以提供帮助。很难解释并想出一个好头衔。谢谢!
答案 0 :(得分:1)
如果只选择那两列(name和col1)就足够了,你可以使用:
select
distinct x.name, x.col1
from table_name x
where x.col1 = 2;
或
select
x.name, x.col1
from table_name x
where x.col1 = 2
group by (x.name, x.col1);
如果你需要所有的值,但是你不介意哪一个符合你的标准的多个记录(例如Dan 2 2 1或Dan 2 1 3),你可以使用它(它将记录这些记录中的第一个按标准订购):
select xx.name, xx.col1, xx.col2, xx.col3
from (select
x.name, x.col1, x.col2, x.col3, dense_rank() over (partition by x.name order by x.name, x.col1, x.col2, x.col3) rnk
from table_name x
where x.col1 = 2) xx
where xx.rnk = 1;
答案 1 :(得分:0)
据我所知,这个查询可以解决你的问题:
select distinct a.* from temp_ids a join
(select name, max(col1 || ' ' || col2 || ' ' || col3) id
from temp_ids
where col1 = 2
group by name
) b
on (a.name = b.name and (col1 || ' ' || col2 || ' ' || col3) = b.id)
;
原因,最好使用唯一记录ID代替连接,但生成id是可能的。确保id的函数为每个列组合返回唯一值(在这种情况下使用(col1 ||''|| col2 ||''|| col3))