Найти наиболее распространенные ключи, пары значений с Hstore в postgres

Я собираю список предметов и номеров версий в столбце hstore в postgres. Мне интересно увидеть 100 наиболее распространенных пар ключ-значение. Например, если это был мой набор данных:

"foo"=> "22",
"foo"=> "33",
"bar"=> "55",
"baz"=> "77",
"foo"=> "22"

Я хотел бы знать, что "foo"=>"22" является наиболее распространенной парой ключ / значение в моей базе данных. Скажем для простоты разговора о проблеме, что имя таблицы widgets и имя столбца hstore items,

select ??? from widgets;

Можно ли получить список пар значений верхнего ключа, используя только SQL?

3 ответа

О, это довольно просто. Вот:

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

Чтобы получить пары ключ / значение в виде набора, соответствующая функция each():

select * from each('a=>1,b=>2')

http://www.postgresql.org/docs/current/static/hstore.html

Простой подсчет с лимитом может помочь:

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

Как вы после полной пары ключ / значение, следующее должно сделать это:

select items, count(*) as cnt
from widgets
group by items
order by 2 desc
limit 100
Другие вопросы по тегам