在Postgresql中计算共享的hstore密钥名称

时间:2014-09-16 15:10:22

标签: postgresql hstore

如果我有一个包含HSTORE列的表:

CREATE TABLE thing (properties hstore);

如何查询该表以查找每一行中存在的hstore密钥名称。

例如,如果上表中包含以下数据:

               properties                    
-------------------------------------------------
"width"=>"b", "height"=>"a"
"width"=>"b", "height"=>"a", "surface"=>"black"
"width"=>"c"

如何编写返回'width'的查询,因为这是每行中唯一出现的键?

skeys()会给我所有属性键,但我不确定如何聚合它们,所以我只有每行中出现的那些。

1 个答案:

答案 0 :(得分:1)

手册让我们大部分都在那里,但不是一路......在标题"统计"标题下的http://www.postgresql.org/docs/8.3/static/hstore.html底部,他们描述了一种计算方法hstore中的密钥。

如果我们将其调整到上面的示例表中,您可以将计数与表中的行数进行比较。

SELECT key
    FROM (SELECT (each(properties)).key FROM thing1) AS stat
    GROUP BY key
        HAVING count(*) = (select count(*) from thing1)
    ORDER BY key;

如果您想找到相反的(所有那些不是的键在表的每一行中),只需将=更改为<而且你正在做生意!