2016-07-16 5 views
0

キーがhstoreデータ列にどのように含まれているかを調べます。postgresqlキーがリスト "foo"、 "bar"にある場合、hstoreデータのキーの行ごとの番号を取得

array_length(akeys(tags), 1) as num_keys 

これはすべてのタグで問題なく動作します。

nodesには、多くの異なるタグがあります - 私はSELECT内のタグの行ごとに番号を付けます。

"name"=>"Campus", "amenity"=>"restaurant", "wheelchair"=>"yes" 

数だけ "名前" - >結果1

SELECT 
id, 
st_x(ST_Transform(geom,4326)) AS lon, 
st_y(ST_Transform(geom,4326)) AS lat, 
array_length(akeys(tags), 1) as num_keys, 
tags->'name' AS name, 
tags->'amenity' AS amenity, 
tags->'addr:street' AS street, 
tags->'addr:housenumber' AS housenumber, 
tags->'addr:postcode' AS postcode, 
tags->'addr:city' AS city, 
tags->'cuisine' AS cuisine, 
tags->'beer_garden' AS beer_garden, 
tags->'outdoor_seating' AS outdoor_seating, 
tags->'smoking' AS smoking, 
tags->'brewery' AS brewery, 
tags->'website' AS website, 
tags->'internet_access' AS wlan, 
tags->'phone' AS phone, 
tags->'email' AS email, 
tags->'opening_hours' AS opening_hours 
FROM 
nodes 
WHERE 
tags->'amenity' IN ('pub','bar','nightclub','biergarten','cafe','restaurant') 
AND 
tags->'name' IS NOT NULL; 

答えて

0

解決策は以下のとおりです。

SELECT 
CASE WHEN 'email' = ANY (akeys(tags)) THEN 1 ELSE 0 END + 
CASE WHEN 'opening_hours' = ANY (akeys(tags)) THEN 1 ELSE 0 END 
AS count_tags 
FROM 
nodes 
関連する問題