SQL查询仅返回一个列值的第一次出现

时间:2015-10-28 12:53:25

标签: sql postgresql

我不确定如何提出这个问题...但是现在就这样了。

我有一个名为lists的表格,其中有四列,idnametypegrouptype列值不是唯一的,而是文本列。我需要一个查询来从表id返回typelists,但我只需要每个type中的一个。它也应该按字母顺序排列。它可以是每种类型的第一次出现。

在postgreSQL 9.4.5中,我尝试过select distinct list_type, id from lists order by list_type;,但这当然会返回具有唯一ID的重复类型。

我只需要第一次出现typeid

一些示例数据:


                  id                  |           type            
--------------------------------------+--------------------------------
 0014dea9-f73f-46d0-bf7d-d52717029582 | invest_fees
 004665b5-4657-4cbc-8534-1aa9e4ef305f | invest_fees
 00910f6c-bdf0-4991-ac0c-969b3b9c6b84 | invest_fees
 009ed283-531b-4d7b-b51d-0c0e0e7a5707 | countries
 00b4f8e2-ae47-4083-ae6e-8d6dbaa2cd63 | invest_fees
 00ca1972-cf70-4fa2-bfde-bc89fce19433 | invest_fees
 00feb6a2-4ee7-4e31-8780-cb5938587669 | countries
 010777bc-7e74-4c13-8808-4c35cfdbf988 | pick_banks
 01852693-7560-4de5-a534-0519e7c04c51 | countries
 01bee5a4-23f7-427d-9b84-4c707154a812 | countries
 01bf29f9-70af-4b3c-b7f9-d01e0f0f142c | invest_fees
 01d51fe3-4c32-4d21-b38c-8e84a92ff0aa | invest_fees
 01d981dd-13d4-4098-a7e3-bd1bb5f02f2b | countries
 01de77bb-ff82-4c3c-b26f-f3829d84dd29 | invest_fees
 01df6e6c-9a77-4b83-a825-09949768df54 | countries
 01f11d01-f490-48a9-b21c-803f7c03f5f6 | invest_mtos

4 个答案:

答案 0 :(得分:3)

您可以使用row_number函数按id获取一个type(按升序排序)。

select id, type from 
(
select id, name, type, "group", 
row_number() over(partition by type order by type) as rn
from lists
) t
where rn = 1

答案 1 :(得分:1)

在postgres中,您可以使用

SELECT DISTINCT ON (type) type, many, other, columns FROM lists ORDER BY type ASC;

这应该只选择与不同类型一样多的行。在您的情况下,类型为invest_fees

的只有一行

您可以在hereDISTINC ON处阅读有关选择的更多信息。

答案 2 :(得分:0)

select min(id) as id, list_type
from lists
group by list_type
order by list_type

答案 3 :(得分:0)

每个类型需要一个结果行。这转换为SQL中的GROUP BY type

然后你说你不关心每种类型的ID,所以使用MINMAX,这没关系:

select list_type, min(id) as one_of_its_ids
from lists 
group by list_type
order by list_type;