Sql Postgres:具有预定义值集的GROUPBY子句
我可以对下表进行查询: 表1:Sql Postgres:具有预定义值集的GROUPBY子句,sql,arrays,postgresql,left-join,coalesce,Sql,Arrays,Postgresql,Left Join,Coalesce,我可以对下表进行查询: 表1: id name source_url 1 object1 www.google.com 2 object2 www.facebook.com 3 object3 www.twitter.com 4 object5 www.google.com 查询: select count(*) as counts, source_u
id name source_url
1 object1 www.google.com
2 object2 www.facebook.com
3 object3 www.twitter.com
4 object5 www.google.com
查询:
select count(*) as counts, source_url from Table1 group by source_url
上述查询将给出以下结果:
counts source_url
2 www.google.com
1 www.facebook.com
1 www.twitter.com
在上面的场景中,我想要的是按照数组中的元素集对表1进行分组。
范例
我希望上表的结果应该是:
counts source_url
2 www.google.com
1 www.facebook.com
0 www.instagram.com
0 www.yahoo.com
0 www.abc.com
您需要对现有查询中的数据集应用IN运算符
select count(*) as counts, source_url from Table1 WHERE source_url IN ('www.facebook.com','www.google.com','www.instagram.com','www.yahoo.com','www.abc.com') group by source_url
编辑2:
如果需要计算与数据集不匹配的行数,则可以尝试内置SQL函数。我提到了其中一个。
根据您的数据库,您可以找到可用的函数
select COALESCE(count(*), 0) as counts, source_url from Table1 WHERE source_url IN ('www.facebook.com','www.google.com','www.instagram.com','www.yahoo.com','www.abc.com') group by source_url
UNION
select COALESCE(count(*), 0) as counts, source_url from Table1 WHERE source_url NOT IN ('www.facebook.com','www.google.com','www.instagram.com','www.yahoo.com','www.abc.com') group by source_url
将数组卸载到派生表,左键连接到该表,并使用
COALESCE()
将NULL替换为0:
SELECT COALESCE(counts, 0) AS counts, source_url
FROM unnest('{www.facebook.com,www.google.com,www.instagram.com
,www.yahoo.com,www.abc.com}'::text[]) source_url
LEFT JOIN (
SELECT count(*) AS counts, source_url
FROM Table1
GROUP BY source_url
) USING (source_url);
source\uURL
成为使用此简短语法的派生表的表名和列名。如果需要,您可以更加详细:
...
FROM unnest(your_array) AS tbl_alias(column_alias)
...
我已经尝试了上述查询。它不会给出表中不存在的源url的结果。它只给出表中可用的源url的计数,并在我的数据库中查询更新的答案。。。它仍然给出相同的结果。不要给出包含0的url的结果occurrence@SyedAsadAbbasZaidi在这种情况下,您需要对结果进行合并。因为您需要满足一个条件,并且还需要不满足该条件的结果集。我有一个add UNION解决方案。那是常规PostgreSQl数组还是JSON数组?欧文:
SELECT COALESCE(counts, 0) AS counts, source_url
FROM unnest('{www.facebook.com,www.google.com,www.instagram.com
,www.yahoo.com,www.abc.com}'::text[]) source_url
LEFT JOIN (
SELECT count(*) AS counts, source_url
FROM Table1
GROUP BY source_url
) USING (source_url);
...
FROM unnest(your_array) AS tbl_alias(column_alias)
...