我有一个这样的查询:
select id, array_length(users_who_like_ids,1) as ct
from queryables
order by 2 desc;
Run Code Online (Sandbox Code Playgroud)
但是空数组(没有元素)排在最前面。array_length()
对于这种情况,我宁愿返回 0,以便将其排序到底部。
我可能不理解array_length()
(好吧,绝对)但是:
embers_dev2=# select array_length(array[1,2], 1), array_length(ARRAY[]::integer[],1);
Run Code Online (Sandbox Code Playgroud)
应该返回 0 而不是没有(NULL),对吗?
我可以在上面做一个像内联这样的 if 语句吗?
根据关于 SO 的这个相关答案,它看起来COALESCE
可能是我想要的 - 但我愿意接受更好的想法:
我正在处理启用了intarray扩展的 Postgres 9.4项目。我们有一个看起来像这样的表:
items
-------------------------------------
id name tag_ids
--------------------------------------
1 a car {1,4}
2 a room to rent {1}
3 a boat {1,2,4,11}
4 a wine {2}
5 emily {3}
Run Code Online (Sandbox Code Playgroud)
如果可能,我想对标签 ID 进行分组。就像获取具有tag_id
“{1,2,4,11}”的所有元素的计数
tag_id count
1 3
2 2
4 2
11 1
Run Code Online (Sandbox Code Playgroud)
这可能吗?我会认为这样的交叉点:
select * from items where tag_ids && '{1,2,4,11}'
Run Code Online (Sandbox Code Playgroud)
但我需要按交集结果内的数组元素进行分组。如果我按 tag_ids 分组,它只是唯一值。
我该怎么做?