Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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中使用Hstore查找最常见的键、值对_Sql_Postgresql_Hstore - Fatal编程技术网

Sql 在postgres中使用Hstore查找最常见的键、值对

Sql 在postgres中使用Hstore查找最常见的键、值对,sql,postgresql,hstore,Sql,Postgresql,Hstore,我正在postgres的hstore列中收集项目和版本号列表。我想看看100个最常见的键值对。例如,如果这是我的数据集: “foo”=>“22”, “foo”=>“33”, “条”=>“55”, “baz”=>“77”, “foo”=>“22” 我想知道“foo”=>“22”是我数据库中最常见的键/值对。为了便于讨论,我们假设表名是widgets,而hstore列名是items select ??? from widgets; 是否可以仅使用SQL获取顶级键值对的列表?哦,这非常简单。在这

我正在postgres的hstore列中收集项目和版本号列表。我想看看100个最常见的键值对。例如,如果这是我的数据集:


“foo”=>“22”,
“foo”=>“33”,
“条”=>“55”,
“baz”=>“77”,
“foo”=>“22”

我想知道
“foo”=>“22”
是我数据库中最常见的键/值对。为了便于讨论,我们假设表名是
widgets
,而hstore列名是
items

select ??? from widgets;

是否可以仅使用SQL获取顶级键值对的列表?

哦,这非常简单。在这里:

SELECT key, count(*) FROM
  (SELECT (each(h)).key FROM reports) 
    AS stat
GROUP BY key
ORDER BY count DESC, key
LIMIT 100;

哦,这很简单。在这里:

SELECT key, count(*) FROM
  (SELECT (each(h)).key FROM reports) 
    AS stat
GROUP BY key
ORDER BY count DESC, key
LIMIT 100;

由于您正在查找完整的键/值对,因此应执行以下操作:

select items, count(*) as cnt
from widgets
group by items
order by 2 desc
limit 100

由于您正在查找完整的键/值对,因此应执行以下操作:

select items, count(*) as cnt
from widgets
group by items
order by 2 desc
limit 100

要将键/值对作为一个集合获取,相关函数为
each()

一个有限制的简单计数就可以做到这一点:

SELECT (item).key, (item).value, count(*) as count
FROM (SELECT each(items) as item FROM widgets) as t
GROUP BY (item).key
ORDER BY 2 DESC, (item).value
LIMIT 100
如果您只对键感兴趣,可以使用更简单的
skeys()

SELECT k, count(*) as count
FROM (SELECT skeys(items) as k FROM widgets) as t
GROUP BY k
ORDER BY 2 DESC, k
LIMIT 100

要将键/值对作为一个集合获取,相关函数为
each()

一个有限制的简单计数就可以做到这一点:

SELECT (item).key, (item).value, count(*) as count
FROM (SELECT each(items) as item FROM widgets) as t
GROUP BY (item).key
ORDER BY 2 DESC, (item).value
LIMIT 100
如果您只对键感兴趣,可以使用更简单的
skeys()

SELECT k, count(*) as count
FROM (SELECT skeys(items) as k FROM widgets) as t
GROUP BY k
ORDER BY 2 DESC, k
LIMIT 100