นับคะแนนในรูปหลายเหลี่ยมด้วย Postgis


16

ฉันมีปัญหาง่ายๆ: ฉันต้องการนับจำนวนคะแนนภายในชุดรูปหลายเหลี่ยม

ฉันมี SQL อยู่แล้ว แต่เพียงคืนค่า gid ของรูปหลายเหลี่ยมที่มีคะแนนอยู่จริง

ตารางของฉัน: ชั้นรูปหลายเหลี่ยมที่มี 19,000 แถวและชั้นจุดที่มี 450 แถว

SQL ต่อไปนี้

select grid.gid, count(*) AS totale FROM grid, kioskdhd3 WHERE 
st_contains(grid.geom,kioskdhd3.geom) GROUP BY grid.gid;

ส่งคืนเฉพาะรูปหลายเหลี่ยม 320 รูปที่มีคะแนน แต่ฉันต้องการให้รูปหลายเหลี่ยมคืนทั้งหมดแม้จะคิดว่าจำนวนคะแนนเป็น 0

แน่นอนว่ามันเกี่ยวข้องกับ WHERE-clause ของฉันด้วย ฉันต้องใส่ st_contain ของฉันที่ไหน?

ขอบคุณ Carsten



ขอบคุณ แต่พวกเขาทุกคนมีข้อที่ ฉันไม่รู้ว่าฉันต้องการหรือไม่ คุณจะเขียนมันใหม่อย่างไร?
hoge6b01

คำตอบ:


23
SELECT grid.gid, count(kioskdhd3.geom) AS totale 
FROM grid LEFT JOIN kioskdhd3 
ON st_contains(grid.geom,kioskdhd3.geom) 
GROUP BY grid.gid;

สวัสดี Nicklas ได้รับคำตอบจากรายการส่งเมลใช่มั้ย ขอบคุณทุกคน
hoge6b01

2
ไม่ขอโทษมันคล้ายกันไหม? การรวมภายนอกเป็นวิทยาศาสตร์จรวดเมื่อจัดการกับฐานข้อมูลเชิงสัมพันธ์ ;-)
Nicklas Avén

1
:-) ฉันต้องตรวจสอบรายการ ดูที่เวลา คำตอบของฉันที่นี่คือก่อนรายการ - คำตอบ แต่อย่างที่คุณพูดคล้ายกันมาก :-)
Nicklas Avén

-1

ต่อนี้ซ้ายร่วมจะไม่ได้รับการสนับสนุนในดัชนี GIST

ฉันขอแนะนำ:

SELECT grid.gid, 
       SUM(CASE WHEN st_contains(grid.geom,kioskdhd3.geom) THEN 1 ELSE 0 END) AS total
FROM grid, kioskdhd3 
GROUP BY grid.gid;

1
Querry ไม่ได้ใช้ดัชนีอวกาศ: explain.depesz.com/s/U6Iy คำตอบ Nicklas ไม่: explain.depesz.com/s/nhH
nickves
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.