我不确定如何提出这个问题...但是现在就这样了。
我有一个名为lists
的表格,其中有四列,id
,name
,type
和group
。 type
列值不是唯一的,而是文本列。我需要一个查询来从表id
返回type
和lists
,但我只需要每个type
中的一个。它也应该按字母顺序排列。它可以是每种类型的第一次出现。
在postgreSQL 9.4.5中,我尝试过select distinct list_type, id from lists order by list_type;
,但这当然会返回具有唯一ID的重复类型。
我只需要第一次出现type
和id
。
一些示例数据:
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
答案 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
您可以在here右DISTINC 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,所以使用MIN
或MAX
,这没关系:
select list_type, min(id) as one_of_its_ids
from lists
group by list_type
order by list_type;