只选择一个不同的列

时间:2010-12-06 13:22:46

标签: sql postgresql

我想这是一个很容易解决的问题,但我正在研究一小时的答案。 我有一个包含三列的表:“id”,“id_x”和“name”。但它有重复的值,如下所示:

id  id_x    name
1   100     Name_aaa
2   100     Name_aaa
3   100     Name_aaa
4   100     Name_aaa*
5   101     Name_bbb
6   101     Name_bbb*

好的,好吧,我没有创建这个表,我也无法修改它们......我只想知道我可以执行什么查询只返回值“100 - Name_aaa”和“101 - name_bbb” ...请注意,在某些名称后面有一个“*”。我只想通过“id_x”进行分组。

有没有办法在不使用子查询或连接的情况下执行此操作?

提前致谢!

4 个答案:

答案 0 :(得分:9)

有些未经测试,但应该这样做

select id_x, min(name) as name
from table
group by id_x

答案 1 :(得分:1)

试试这个,

  

从tablename

中选择不同的id_x,名称

答案 2 :(得分:0)

select distinct
         id_x,
         case when name ~ E'\\*$' then substring(name, 1, length(name)-1)
              else name end
from t;

答案 3 :(得分:0)

Or

SELECT DISTINCT ON (id_x) id_x, name FROM table ORDER BY id_x, name;