Sql 在postgres中使用Hstore查找最常见的键、值对
我正在postgres的hstore列中收集项目和版本号列表。我想看看100个最常见的键值对。例如,如果这是我的数据集: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获取顶级键值对的列表?哦,这非常简单。在这
“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