Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres:具有预定义值集的GROUPBY子句_Sql_Arrays_Postgresql_Left Join_Coalesce - Fatal编程技术网

Sql Postgres:具有预定义值集的GROUPBY子句

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

我可以对下表进行查询:

表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_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)
...