Порахуйте очки в Полігоні з Постгісами


16

У мене проста проблема: я хочу підрахувати кількість балів у наборі багатокутників.

У мене вже є SQL, але він лише повертає полігону, яка фактично містить очки.

Мої таблиці: багатокутний шар із 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. Де я повинен помістити свої st_contains?

Дякую Карстен



дякую, але всі вони мають пункт WHERE. Я не знаю, чи потрібна вона мені. Як би ви це переписали?
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;

Привіт Ніклас, отримав цю відповідь зі списку розсилки, правда? Дякую всім
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
У квері не використовуються просторові індекси: objas.depesz.com/s/U6Iy . Відповідь Нікласа так: роз'яснити.depesz.com
s/
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.